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

时间:2017-10-18 03:46:39

标签: bash macos grep find

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

$ find . -type f -exec grep -ri "\x5B\x27\x21\x3D\xE9" {} \;

搜索工作正常,但我知道在不使用-a选项的情况下匹配有限制,结果只返回:

Binary file ./file_with_bytes matches

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

2 个答案:

答案 0 :(得分:1)

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

-b --byte-offset  Print the 0-based byte offset within the input file

使用此选项的简单示例:

$ grep -obarUP "\x01\x02\x03" /bin

在目录

中打印出匹配模式的文件名和字节偏移量
/bin/bash:772067:
/bin/bash:772099:
/bin/bash:772133:
/bin/bash:772608:
/bin/date:56160:

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

答案 1 :(得分:0)

不是在电脑上,而是使用:

od -x yourFile

xxd yourFile

将其转换为十六进制,左侧有偏移量。

有时可能找不到您的搜索字符串,因为字符不会连续显示,而是分成两行。您可以将文件传递两次,第二次切断前4个字节,以确保在一次传递或另一次传递中找到完整的字符串。然后重新添加offest并对其进行排序和取消。