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

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

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

-I      Ignore binary files.  This option is equivalent to 
        --binary-file=without-match option.

它还对二进制文件说了这一点:

 --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.

我无法想象我会关心二进制文件中的匹配的情况。如果存在这种情况,那肯定是例外而不是常态。为什么默认情况下不grep忽略二进制文件而不是需要设置此标志来执行此操作?

答案1

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

答案2

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

grep函数名/lib/lib*

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

答案3

要处理二进制文件或 grep 认为是二进制文件的文件,请使用

grep --binary-files=text "data" f1 f2

相关内容