我需要搜索并替换二进制文件中特定范围内的字节字符串。
搜索 mytest.pcap 从字节 1000 到 2000
将 x93\x33\x59\x05\x00替换为 x93\x33\x59\x00\x0
谢谢里卡尔多
我的方法:
sed 's/x93x33x59x05x00/x93x33x59x00x00/g' mytest.pcap > mytest_mod.pcap
您使用的sed
行看起来不错,所以我想剩下的就是范围。除非您对性能有严格的要求,否则我相信这可以工作:
(head -c1000 mytest.pcap;
tail -c+1001 mytest.pcap | head -c1000 | sed 's/.../.../g';
tail -c+2001 mytest.pcap) > mytest_mod.pcap
更新:
如果性能是一个问题,我认为除了编写一个单一用途的程序之外别无选择(也许perl
会允许"单行",但这不是我的领域(。在python中,它可能看起来像这样:
import sys
import re
sys.stdout.write(sys.stdin.read(1000))
range = sys.stdin.read(1000)
sys.stdout.write(re.sub('x93x33x59x05x00', 'x93x33x59x00x00', range))
while True:
buf = sys.stdin.read()
if buf:
sys.stdout.write(buf)
else:
break
请注意,它强烈依赖于read(1000)
真正读取这 1000 个字节;对于这个大小,我相信这是相当安全的假设。
将代码段保存到名为 subst_range.py
的文件中,然后运行 python subst_range.py < mytest.pcap > mytest_mod.pcap
。