即使使用 -a 选项,grep 也无法在 MS-Word 文件中找到已知字符串

即使使用 -a 选项,grep 也无法在 MS-Word 文件中找到已知字符串

我有一个包含字符串“Abekat”的 MS-Word 文件。文件 (test.docx) 的全部内容实际上只是:“此文件包含单词 Abekat”。站在与我的目标文件 (test.docx) 相同的目录中并执行终端命令

grep -ia Abekat *

我根本没有得到任何回应。我不明白为什么会这样。我希望有人能向我解释一下。(我正在运行 macOS (10:15.4) Best Eigil

答案1

部分原因是 .docx 文件实际上是一个压缩的 .zip 文件,因此 Abekat 字符序列并不存在于 .zip 文件中(或者如果存在,那也是“偶然”的)

即使你解压 .docx 文件,它也会给你一个包含许多文件(例如 .xml、.rels 和其他文件)的文件夹结构,但对这些文件运行 grep 可能找不到单词 Abekat。

这是因为 Word 有时会将一段连续的文本分成单独的“运行”。每个运行都被 xml 标记包围,因此您的文本可能看起来像这样<w:r><w:t>Abe</w:t></w:r><w:r><w:t>kat</w:t></w:r>。例如,如果文本“kat”的格式与“Abe”不同,它将位于单独的运行中,并带有一些描述格式的额外 XML 元素。但有时 Word 将文本分成 2 个运行的原因并不明显。

如果您只是使用 grep 来尝试查找包含特定字符串的文件,那么最好使用 mdfind - 它是 Mac OS Spotlight 的命令行等效项。(我自己从未使用过它)

相关内容