Linux 如何在grep中抑制二进制文件匹配结果

Linux 如何在grep中抑制二进制文件匹配结果,linux,grep,Linux,Grep,在linux中使用grep时,结果通常包含很多“二进制文件XXX匹配”,我不关心这些。如何抑制这部分结果,或者如何排除grep中的二进制文件?有三个选项,您可以使用-I用于排除grep中的二进制文件。其他是行号和文件名 grep -I -n -H -I -- process a binary file as if it did not contain matching data; -n -- prefix each line of output with the 1-based line

在linux中使用
grep
时,结果通常包含很多“二进制文件XXX匹配”,我不关心这些。如何抑制这部分结果,或者如何排除grep中的二进制文件?

有三个选项,您可以使用
-I
用于排除grep中的二进制文件。其他是行号和文件名

grep -I -n -H 


-I -- process a binary file as if it did not contain matching data; 
-n -- prefix each line of output with the 1-based line number within its input file
-H -- print the file name for each match
因此,这可能是运行grep的一种方法:

grep -InH your-word *

这是一个老问题,它已经得到了回答,但我想我应该在这里为任何想使用它的人设置--binary files=text选项。-I选项忽略二进制文件,但如果希望grep将二进制文件视为文本文件,请使用--binary files=text,如下所示:

bash$ grep -i reset mediaLog*
Binary file mediaLog_dc1.txt matches
bash$ grep --binary-files=text -i reset mediaLog*
mediaLog_dc1.txt:2016-06-29 15:46:02,470 - Media [uploadChunk  ,315] - ERROR - ('Connection aborted.', error(104, 'Connection reset by peer'))
mediaLog_dc1.txt:ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
bash$

@skwllsp但使用-l时,结果不包含匹配的行,只包含匹配的文件名。行有一个选项:grep-I-n-HThis是离题的?这是什么作品。Thx@skwllspI将使用
-Irn
,其中
r
表示递归查找所有文件夹<代码>H是EXSESSIONhere@vladkras,“H在这里是exsession”-您的意思是多余的,即它已经是默认值了?感谢您在回答中澄清了简短选项的含义。有太多简洁的linux命令答案,以至于没有给出解释,我觉得这很烦人。@AaronFranke:
-n
标志告诉grep报告它找到匹配的文件的行号。“基于1”意味着行计数从1开始,而不是像编程中经常做的那样从零开始。因此,如果文件名为
example.txt
的第一行是
Hello,world
,第二行是
Hello cat
,第三行是
cats are cool
,则通过
grep-n cat example.txt
搜索“cat”,你会得到
example.txt:2:Hello cat
example.txt:3:cats很酷
。这非常有用,在你不想忽略二进制文件时效果非常好!这对于被视为二进制文件但仍然需要查看的文件非常有效,而接受的答案只是忽略这些文件。谢谢@在什么情况下需要将二进制文件视为文本文件?我没有用过它,你能详细说明一下吗?@pjay一个用例是当你想读取数据库的二进制日志时(在我的例子中是MySQL)。我可以对二进制日志进行解码,然后我想使用grep只将查询保存在日志中。在不使用--binary files=text的情况下使用grep可以排除几乎所有的查询。@pjay我发现在尝试从各种系统的日志文件中获取信息时经常会出现这种情况。日志文件可以包含各种信息,当有人在用户名中使用表情符号时,整个文件可以标记为二进制文件