我在bash shell中使用grep在文件中查找一系列十六进制字节:
$ find . -type f -exec grep -ri "\x5B\x27\x21\x3D\xE9" {} \;
搜索工作正常,但我知道在不使用-a
选项的情况下匹配有限制,结果只返回:
Binary file ./file_with_bytes matches
我想获得匹配结果的偏移量,这可能吗?我愿意使用另一种类似的工具,我只是不确定它会是什么。
答案 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并对其进行排序和取消。