等效于grep二进制文件的命令


24

我有一堆二进制文件,而且我知道在这些二进制文件中有一些我想找到的字符串。

我想做一个:

grep -lir "the string I am looking for"

并获取包含该字符串但grep -lir显然不适用于这些文件的特定目录内所有二进制文件的列表。

是否有可以从终端进行这种搜索的命令?

Answers:


24

使用GNU grep,您可以使用-a选项使其将二进制文件视为文本文件:

grep -ali -- string file

如果您的grep版本不支持-a,则可以改用ack。在ack 1.x中,您不需要包含-a选项,在ack 2.x中,您不需要包含选项,因为在默认情况下搜索包含非文本文件时(在未指定任何文件的情况下,仅忽略非文本文件)。


我是不是看错了ack自己的自我描述?(在手册中)“ ack 2.x将搜索未由[blah blah]明确忽略的每个常规非二进制文件”,因此听起来ack 2.x应该仍然停止读取文件,如果目录看起来二进制
彼得·科德斯

1
@PeterCordes:这是在没有选择文件的情况下发生的。尝试ack grep /bin/grep,您将获得结果。我更新了答案,以免造成混淆。
cuonglm

1
尝试使用strings命令从二进制文件中获取字符串。
Uwe Burger

23

该命令strings将从文件中提取所有ascii数据,如果随后grep输出,则可以搜索数据:

strings <filename> | grep "search text"

这应该是公认的答案。此二进制文件非常适合此任务。
Vladislavs Dovgalecs

5
@xeon:使用并不总是很好strings,请在此处阅读更多信息。
cuonglm

1
由于目标是确定哪些二进制文件包含字符串,strings -f因此更为合适。
jamesdlin

这是一个更好的答案。
Xofo

9

您的问题是关于查找包含模式的二进制文件(我们已经有了很好的答案!)。作为补充,我们可能希望得到这些事件。

我经常用

grep -aPo '.{0,20}pattern.{0,20}'  binfile

得到20个字符的周围环境。

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.