【问题标题】:How to suppress binary file matching results in grep [closed]如何在 grep 中抑制二进制文件匹配结果 [关闭]
【发布时间】:2014-11-09 07:33:10
【问题描述】:

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

【问题讨论】:

  • @skwllsp 但是使用-l,结果不包含匹配的行,只有匹配的文件名。

标签: linux grep


【解决方案1】:

您可以使用三个选项。 -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 在这里过分了
  • @vladkras,“H 在这里过度” - 你的意思是多余的,即它已经是默认值了?
  • 感谢您澄清答案中的短选项的含义。 SO上有很多简洁的linux命令答案没有给出任何解释,我觉得很烦人。
  • 我很困惑-n 到底是做什么的?什么是从 1 开始的?
  • @AaronFranke:-n 标志告诉 grep 报告找到匹配的文件的行号。 “基于 1”意味着行数从 1 而不是 0 开始,就像在编程中经常做的那样。所以,如果你的文件名为example.txt的第一行是Hello, world,第二行是Hello cat,第三行是cats are cool,然后通过grep -n cat example.txt搜索“猫”,你会得到example.txt:2: Hello catexample.txt:3: cats are cool.
【解决方案2】:

这是一个老问题,已经得到解答,但我想我会将 --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$

【讨论】:

  • 这非常有用,当您不想忽略二进制文件时效果很好!这对被视为二进制文件但仍需要查看的文件非常有效,而接受的答案只是忽略这些文件。谢谢!
  • @amaidain 在什么情况下您需要将二进制文件视为文本文件?没用过,能详细点吗
  • @pjay 一个用例是当您想要读取数据库的二进制日志(在我的例子中是 MySQL)。我可以解码二进制日志,然后我想使用 grep 只保留存储在日志中的查询。使用不带 --binary-files=text 的 grep 几乎可以排除所有查询。
  • @pjay 我发现在尝试从各种系统的日志文件中获取信息时经常发生这种情况。日志文件可以包含各种信息,当有人在其用户名中使用表情符号时,整个文件可以标记为二进制
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2016-11-20
相关资源
最近更新 更多