【发布时间】:2014-11-09 07:33:10
【问题描述】:
在linux中使用grep时,结果往往会包含很多“二进制文件XXX匹配”,我不关心。如何抑制这部分结果,或者如何在grep中排除二进制文件?
【问题讨论】:
-
@skwllsp 但是使用-l,结果不包含匹配的行,只有匹配的文件名。
在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 *
【讨论】:
-Irn,其中r 代表递归查看所有文件夹。 H 在这里过分了
-n 到底是做什么的?什么是从 1 开始的?
-n 标志告诉 grep 报告找到匹配的文件的行号。 “基于 1”意味着行数从 1 而不是 0 开始,就像在编程中经常做的那样。所以,如果你的文件名为example.txt的第一行是Hello, world,第二行是Hello cat,第三行是cats are cool,然后通过grep -n cat example.txt搜索“猫”,你会得到example.txt:2: Hello cat 和 example.txt:3: cats are cool.
这是一个老问题,已经得到解答,但我想我会将 --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$
【讨论】: