grep 二进制文件的等效命令

grep 二进制文件的等效命令

我有一堆二进制文件,并且我知道这些二进制文件里面有我想要查找的字符串。

我想做一个:

grep -lir "the string I am looking for"

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

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

答案1

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

strings <filename> | grep "search text"

答案2

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

grep -ali -- string file

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

答案3

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

我经常使用

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

获取 20 个字符的周围上下文。

答案4

bgrep如果行不一定适合内存

我时不时地回到这个随机仓库:https://github.com/tmbinc/bgrep安装:

curl -L 'https://github.com/tmbinc/bgrep/raw/master/bgrep.c' | gcc -O2 -x c -o $HOME/.local/bin/bgrep -

使用:

bgrep `printf %s saf | od -t x1 -An -v | tr -d '\n '` myfile.bin

示例输出:

myfile.bin: c80000003
\x02abc
myfile.bin: c80000007
dabc

我已经对不适合内存的文件进行了测试,效果很好。

我已在以下位置提供了更多详细信息:grep 大二进制文件的最佳方法?

相关内容