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

Ran*_*Tek 185 linux grep

在linux中使用grep时,结果总是包含很多"二进制文件XXX匹配",我不在乎.如何抑制这部分结果,或者如何在grep中排除二进制文件?

Ser*_*kov 261

您可以使用三种选项.-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
Run Code Online (Sandbox Code Playgroud)

所以这可能是运行grep的一种方法:

grep -InH your-word *
Run Code Online (Sandbox Code Playgroud)

  • 我会使用`-Irn`,其中`r`代表递归查看所有文件夹."H"在这里是特权 (7认同)
  • @AaronFranke:`-n` 标志告诉 grep 报告它找到匹配的文件的行号。“基于 1”意味着行计数从 1 开始而不是从 0 开始,这在编程中经常发生。因此,如果名为 `example.txt` 的文件的第一行是 `Hello, world`,第二行是 `Hello cat`,第三行是 `cats are cool`,那么通过 `搜索“cat” grep -n cat example.txt`,你会得到 `example.txt:2: Hello cat` 和 `example.txt:3:cats are cool`。 (2认同)

ama*_*ain 8

这是一个老问题并且已经得到了解答,但我想我会在这里为所有想要使用它的人添加--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$
Run Code Online (Sandbox Code Playgroud)

  • @pjay,我发现在尝试从各种系统的日志文件中获取信息时经常发生这种情况。日志文件可以包含各种信息,当有人在用户名中使用表情符号时,整个文件可以标记为二进制文件 (2认同)