我有2GB原始格式的文件。我想搜索特定十六进制值“355A3C2F74696D653E”的所有外观并收集以下28个字符。

示例:355A3C2F74696D653E323031312D30342D32365431343A34373A30322D31343A34373A3135
在这种情况下,我需要输出:"323031312D30342D32365431343A34373A30322D31343A34373A3135"或更好的:2011-04-26T14:47:02-14:47:15
我尝试过

xxd -u InputFile | grep '355A3C2F74696D653E' | cut -c 1-28 > OutputFile.txt


xxd -u -ps -c 4000000 InputFile | grep '355A3C2F74696D653E' | cut -b 1-28 > OutputFile.txt

但是我无法正常工作。

有人可以给我提示吗?

最佳答案

在您使用xxd时,在我看来,您想要搜索的文件就像是二进制数据。我建议为此使用更强大的编程语言。 Unix Shell工具假定行尾并且文本大部分为7位ASCII。考虑使用Python:

#!/usr/bin/python
import mmap
fd = open("file_to_search", "rb")
needle = "\x35\x5A\x3C\x2F\x74\x69\x6D\x65\x3E"
haystack = mmap.mmap(fd.fileno(), length = 0, access = mmap.ACCESS_READ)
i = haystack.find(needle)
while i >= 0:
    i += len(needle)
    print (haystack[i : i + 28])
    i = haystack.find(needle, i)

关于linux - 在文件中找到十六进制值并grep以下值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29972507/

10-11 21:02