【问题标题】:Cleaning up text files with sed?用 sed 清理文本文件?
【发布时间】:2014-08-06 22:52:05
【问题描述】:

我有一堆需要清理的文本文件。示例

    `E..4B?@.@...
..9J5.....P0.z.n9.9.. ........
 .k#a..5
E...y^@.r...J5..

E...y_@.r...J5..
..9.P..n9..0.z............
….2..3..9…n7…..@.yr`

sed 有什么方法可以做到这一点吗?喜欢注意奇怪的模式吗?

【问题讨论】:

  • 定义“奇怪”并根据该示例输入发布您的预期输出。
  • 此文本属于该文件类型吗?这看起来并不“干净”,实际上听起来像“提取”。

标签: sed


【解决方案1】:

对于这个答案,我假设您可以使用标准的 unix/linux 工具。

您的文件可能是某种文字处理器格式。如果是这样,摆脱垃圾的最佳方法是使用该程序打开它。您可以通过file 找出哪个:

$ file mysteryfile 
mysteryfile: Composite Document File V2 Document, Little Endian, Os: Windows, Version 6.1 ....

如果这不起作用,有一个标准的 unix 实用程序可以从二进制文件中提取文本。它被称为strings

$ strings mysteryfile
Some
Recovered Text
...

strings 的行为可以通过几个选项进行微调。见man strings

【讨论】:

  • +1 推荐strings;如果您无法确定文档的源格式,或者您没有操作文档所需的工具,那么这非常适合。它并不完美;我认为它不会处理 UTF-16 编码的数据。但这是很好的第一步。
  • @JonathanLeffler 谢谢!我进一步研究了字符集问题。从其手册页中,strings 声称如果给出了-el(或-eb?)选项(我没有测试过),它支持UTF-16。此外,根据这篇文章 stackoverflow.com/questions/7863986/… ,如果给定 -eS 选项,strings 适用于 UTF-8。我测试了 UTF-8 选项轻微,它似乎工作。
  • 有趣;我在……哦,这个千年……当然,事情发生了变化。
  • 遗憾的是,strings 仍然不支持 UTF-8。我在发现这一点时遇到了这个问题。最终,我只是编写了自己的 UTF-8 字符串。 github.com/hackerb9/utf8strings
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2022-10-21
  • 2017-01-30
  • 1970-01-01
相关资源
最近更新 更多