怎么grep return一个结果,然后打开的时候,control+f找不到?

How does grep return a result, then when opened, control+f cannot find?

我运行以下

grep -irln "mold" 

在我的 Windows 7 Enterprise 机器上使用 cygwin 对一个目录进行测试,它在特定的 pdf 文件中找到了匹配项。但是,当我通过 adobe 或 chrome 打开文件并执行 control+f 并搜索 mold 时,没有找到任何结果。此 PDF 已通过 OCR 服务。所以我想我的问题是 grep 怎么可能得到 return 结果,然后对打开的文件执行 ctrl+f 而什么也得不到?

您似乎误会了 grep 会查找文件中的所有事件,而 PDF 文件是用标记语言编写的,用于呈现文本和图像的图形外观。
以一个非常简单的文本文件为例

$ cat << EOF > example.txt
> one dog
> two cats
> three chickens
> EOF

我们将其转换为 postscript 而不是 pdf

$ a2ps example.txt -o example.ps
[example.txt (plain): 1 page on 1 sheet]
[Total: 1 page on 1 sheet] saved into the file `example.ps'
$ ps2pdf example.ps example.pdf

所以我们有 3 个文件具有相同的文本,但后记和 PDF 在原始文本周围有其特定的标记语言。
现在如果我们让 grep 寻找鸡

$ grep chicken example.*
example.ps:(three chickens) N
example.txt:three chickens

您可以看到 PDF 文件不包含 chicken 纯文本。这是因为原始文本在PDF中被压缩了。

mold 的结果是误报。 PDF里面的文字被压缩了,grep找不到。