バイナリ ファイルの特定の範囲内のバイト文字列を検索して置換する必要があります。
バイト 1000 から 2000 まで mytest.pcap を検索します。
x93\x33\x59\x05\x00 を x93\x33\x59\x00\x0 に置き換えます
ありがとう、リカルド
私のアプローチ:
sed 's/\x93\x33\x59\x05\x00/\x93\x33\x59\x00\x00/g' mytest.pcap > mytest_mod.pcap
バイナリ ファイルの特定の範囲内のバイト文字列を検索して置換する必要があります。
バイト 1000 から 2000 まで mytest.pcap を検索します。
x93\x33\x59\x05\x00 を x93\x33\x59\x00\x0 に置き換えます
ありがとう、リカルド
私のアプローチ:
sed 's/\x93\x33\x59\x05\x00/\x93\x33\x59\x00\x00/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('\x93\x33\x59\x05\x00', '\x93\x33\x59\x00\x00', range))
while True:
buf = sys.stdin.read()
if buf:
sys.stdout.write(buf)
else:
break
read(1000)
実際にこれらの 1000 バイトを読み取ることに強く依存していることに注意してください。このサイズの場合、かなり安全な仮定だと思います。
スニペットを like という名前のファイルに保存してから、subst_range.py
を実行しpython subst_range.py < mytest.pcap > mytest_mod.pcap
ます。