我正在生成二进制数据文件,这些文件只是一系列连接在一起的记录。每个记录由一个(二进制)头和二进制数据组成。在二进制头中是一个长度为80个字符的ascii字符串。在某个时候,我写文件的过程有点混乱,我试图通过检查每条记录的实际长度来调试这个问题
这似乎极为相关,但我不理解perl,因此我无法在那里得到公认的答案。另一个答案指向我编译的bgrep,但它希望我给它一个十六进制字符串,我更希望有一个工具,我可以给它ascii字符串,它会在二进制数据中找到它,打印字符串和找到它的字节偏移量
换言之,我正在寻找这样的工具:
工具foobar文件名
或
工具foobar<;文件名
它的输出是这样的:
foobar:10
福巴:410
福巴:810
福巴:1210
...
e、 g.匹配的字符串和开始匹配的文件中的字节偏移量。在本例中,我可以推断每条记录的长度为400字节
其他制约因素:
- 通过正则表达式搜索的能力很酷,但我不需要它来解决这个问题
- 我的二进制文件很大(3.5Gb),所以如果可能的话,我希望避免将整个文件读入内存
grep--字节偏移量--仅匹配--文本foobar文件名
--byte offset选项打印每个匹配行的偏移量
--only matching选项使其为每个匹配实例而不是每个匹配行打印偏移量
--text选项使grep将二进制文件视为文本文件
您可以将其缩短为:
grep-oba foobar文件名
它在GNU版本的grep中工作,默认情况下它是随linux提供的。它在BSD grep(默认情况下随Mac提供)中不工作