grep
的手册页描述了-I
标志,如下所示:-I Ignore binary files. This option is equivalent to
--binary-file=without-match option.
它也对二进制文件说了这句话: br />我想不出我会关心二进制文件中的匹配的情况。如果存在这种情况,那么肯定一定是例外而不是常规。为什么默认情况下,
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
评论
您可以将变量GREP_OPTIONS设置为首选设置,而不必使用那么多命令行开关。其他不支持此类变量的命令的注释:您可以通过在。(ba | z | foo)shrc'中定义别名来设置默认选项:alias grep =“ grep -I”`。
这实际上可能非常有用。例如,我正在搜索项目的统一版本,却不记得它保存在哪个文件中。我搜索版本的格式,然后它提出了一些匹配的二进制文件。原来是5版之前的版本,该版本仅存在于二进制文件中,因此如果没有二进制匹配,我可能会错过它。
仅供参考。有一个工具确认,“比grep更好”。 Ack不会搜索二进制文件。在Debian中,它的名称为“ ack-grep”。