如何在grep中禁止二进制文件匹配结果[关闭]


214

grep在Linux中使用时,结果通常包含很多“二进制文件XXX匹配项”,我并不在乎。如何隐藏这部分结果,或者如何在grep中排除二进制文件?


12
grep -I .........

1
@skwllsp但是,使用-l时,结果不包含匹配的行,仅包含匹配的文件名。
RandyTek

行有一个选项:grep -I -n -H

6
这是题外话?哇
CoffeeTableEspresso

Answers:


300

您可以使用三个选项。-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 *

这可行。Thx @skwllsp
RandyTek 2014年

7
我会使用-Irnwhere r代表递归地查看所有文件夹。H在这里
过分

@vladkras,“ H在这里过分”-您的意思是多余的,即它已经是默认值了吗?
cp.engr

感谢您澄清答案中简短选项的含义。SO上有这么多简洁的linux命令答案,没有给出任何解释,我觉得很烦。
jrahhali

1
@AaronFranke:该-n标志告诉grep报告找到匹配项的文件的行号。“从1开始”表示行计数从1开始而不是从0开始,这在编程中经常这样做。所以,如果你的文件的第一行命名example.txtHello, world,第二行是Hello cat,第三线cats are cool,然后通过搜索“猫” grep -n cat example.txt,你会得到example.txt:2: Hello catexample.txt:3: cats are cool
jvriesem

11

这是一个古老的问题,已经得到了解答,但是我想我将--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$
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.