grep的手册页描述了-I标志,如下所示:

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


它也对二进制文件说了这句话: br />我想不出我会关心二进制文件中的匹配的情况。如果存在这种情况,那么肯定一定是例外而不是常规。为什么默认情况下,grep不忽略二进制文件,而不是要求设置此标志?

评论

您可以将变量GREP_OPTIONS设置为首选设置,而不必使用那么多命令行开关。

其他不支持此类变量的命令的注释:您可以通过在。(ba | z | foo)shrc'中定义别名来设置默认选项:alias grep =“ grep -I”`。

这实际上可能非常有用。例如,我正在搜索项目的统一版本,却不记得它保存在哪个文件中。我搜索版本的格式,然后它提出了一些匹配的二进制文件。原来是5版之前的版本,该版本仅存在于二进制文件中,因此如果没有二进制匹配,我可能会错过它。

仅供参考。有一个工具确认,“比grep更好”。 Ack不会搜索二进制文件。在Debian中,它的名称为“ ack-grep”。

#1 楼

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

评论


PDF文件也是如此。

–约瑟夫·R。
13年3月28日在17:45

+历史上grep无法做到这一点,因此仅出于兼容性考虑,默认值必须是包罗万象的。

–奥利维尔·杜拉克(Olivier Dulac)
13年3月28日在18:54

@OlivierDulac是有意义的,否则忽略二进制文件应该是默认设置。

–大港
13年11月25日在9:46

#2 楼

当我正在编译程序并且链接器(grep)抱怨找不到某些功能时,ld的搜索二进制文件的功能也很有用。
我可以使用诸如

grep function_name /lib/lib*


之类的命令来查找包含它的库。 (库是二进制文件。)

评论


在这种情况下,您宁愿使用grep -l function_name / lib / lib *或nm -Do / lib / lib * | grep function_name或ldconfig -p | grep -o'/.*/lib.*'| xargs nm -Do | grep function_name虽然。

–StéphaneChazelas
2015年6月9日在12:11



好吧,grep some_function / lib / *较短,通常会给出正确的答案-我要查找的库名。但是,是的,有时也需要像您这样的更复杂的方法。

–丹尼尔(DanielFrużyński)
2015年6月9日在12:42