我想用模式修改二进制文件。我已将文件转换为带有xxd
的普通hexdump(来自vim包)。普通文件看起来像这样(只有1行没有尾随LF):
$ xxd -ps file.bin | tr -d '\n' | tee out.txt
3a0a5354...
我想在原始文件中删除所有匹配\x01[^\xFF]*\xFF
的模式(开放标记和结束标记以及它们之间的所有内容除了另一个结束标记),但是 { {1}} 不会像这样工作。
示例输入和所需匹配:
sed
我正在考虑这样做:
020202020101010101feeffeefff0000...
~~~~~~~~~~~~~~~~~~~~
现在我尝试匹配所有聊天 2-by-2,同时排除sed 's/regex//g' in.file > out.file
。有什么想法吗?
答案 0 :(得分:0)
这应该可以解决问题:
((..)|01([0-9a-e][0-9a-f]|[0-9a-f][0-9a-e])*ff)*
也就是说,我们匹配十六进制数字对,其中第一个或第二个数字可以是f而不是两个。在周围的环境中,我们还必须一次匹配两个字符,以确保我们的匹配从偶数开始。
显然,您必须添加一些实际上从输出中删除内部组的内容,这是特定于您的正则表达式引擎的。我只是在发布了这个简单的s / won后才意识到。