为什么 grep 默认不忽略二进制文件?

112 grep

的联机帮助页grep描述了该-I标志如下:

-I      Ignore binary files.  This option is equivalent to 
        --binary-file=without-match option.
Run Code Online (Sandbox Code Playgroud)

它还说明了二进制文件:

 --binary-files=value Controls searching and printing of binary files.
         Options are binary, the default: search binary files but do not print
         them; without-match: do not search binary files; and text: treat all
         files as text.
Run Code Online (Sandbox Code Playgroud)

我想不出我会关心二进制文件中的匹配项的场景。如果存在这种情况,那肯定是例外而不是常态。为什么grep默认情况下不忽略二进制文件而不是要求设置此标志来这样做?

Den*_*ker 102

并非所有 grep 认为是二进制文件的东西,实际上都是二进制文件。例如,puppet 的日志中有 ansi 颜色编码,这使得 grep 认为它们是二进制的。如果我通过 /var/log 搜索,我仍然想搜索它们。

  • + 历史上 grep 不能这样做,因此仅出于兼容性考虑,默认值必须是全包的。 (14认同)
  • PDF 文件也是如此。 (4认同)
  • @OlivierDulac 这是有道理的,否则忽略二进制文件应该是默认值。 (2认同)

小智 9

grep当我编译程序并且链接器 ( ld) 抱怨找不到某些函数时, 搜索二进制文件的能力也很有用。我可以使用类似的命令

grep函数名/lib/lib*

找到包含它的库。(库是二进制文件。)