24 我有一堆二进制文件,而且我知道在这些二进制文件中有一些我想找到的字符串。 我想做一个: grep -lir "the string I am looking for" 并获取包含该字符串但grep -lir显然不适用于这些文件的特定目录内所有二进制文件的列表。 是否有可以从终端进行这种搜索的命令? grep — 太空狗 source
24 使用GNU grep,您可以使用-a选项使其将二进制文件视为文本文件: grep -ali -- string file 如果您的grep版本不支持-a,则可以改用ack。在ack 1.x中,您不需要包含-a选项,在ack 2.x中,您不需要包含选项,因为在默认情况下搜索包含非文本文件时(在未指定任何文件的情况下,仅忽略非文本文件)。 — cuonglm source 我是不是看错了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" — 纽元 source 这应该是公认的答案。此二进制文件非常适合此任务。 — Vladislavs Dovgalecs 5 @xeon:使用并不总是很好strings,请在此处阅读更多信息。 — cuonglm 1 由于目标是确定哪些二进制文件包含字符串,strings -f因此更为合适。 — jamesdlin 这是一个更好的答案。 — Xofo
9 您的问题是关于查找包含模式的二进制文件(我们已经有了很好的答案!)。作为补充,我们可能希望得到这些事件。 我经常用 grep -aPo '.{0,20}pattern.{0,20}' binfile 得到20个字符的周围环境。 — 乔乔 source
ack
自己的自我描述?(在手册中)“ ack 2.x将搜索未由[blah blah]明确忽略的每个常规非二进制文件”,因此听起来ack 2.x应该仍然停止读取文件,如果目录看起来二进制