递归查找二进制文件中的十六进制字节

Jac*_*ary 1 macos bash grep find

我在 bash shell 中使用 grep 来查找文件中的一系列十六进制字节:

$ find . -type f -exec grep -ri "\x5B\x27\x21\x3D\xE9" {} \;
Run Code Online (Sandbox Code Playgroud)

搜索工作正常,尽管我知道在不使用-a仅返回结果的选项时匹配存在限制:

Binary file ./file_with_bytes matches
Run Code Online (Sandbox Code Playgroud)

我想获取匹配结果的偏移量,这可能吗?我愿意使用另一个类似的工具,我只是不确定它会是什么。

eto*_*ght 5

实际上 grep 中有一个选项可以使用

-b --byte-offset  Print the 0-based byte offset within the input file
Run Code Online (Sandbox Code Playgroud)

使用此选项的简单示例:

$ grep -obarUP "\x01\x02\x03" /bin
Run Code Online (Sandbox Code Playgroud)

打印出目录内匹配模式的文件名和字节偏移量

/bin/bash:772067:
/bin/bash:772099:
/bin/bash:772133:
/bin/bash:772608:
/bin/date:56160:
Run Code Online (Sandbox Code Playgroud)

请注意,find实际上不需要,因为该选项-r已经处理了递归文件搜索