2017-08-24 6 views
0

パターンでバイナリファイルを変更したい。私はxxd(vimパッケージから)のプレーンヘキサダンプにファイルを変換しました。RegExすべての文字を2で2つにグループ化するときに除外するセット

$ xxd -ps file.bin | tr -d '\n' | tee out.txt 
3a0a5354... 

私は\x01[^\xFF]*\xFF(トークン開閉トークンと他のクロージング・トークンを除いて、それらの間のすべてを)一致するすべてのパターンを削除する中:プレーンファイルは、この(末尾のLFでのみ1ライン)のように見えますオリジナルファイルしかし、sedはこのようには動作しません。

例入力と理想のマッチ:

020202020101010101feeffeefff0000... 
     ~~~~~~~~~~~~~~~~~~~~  

そして、私はこれをやって考えている:除外し

sed 's/regex//g' in.file > out.file 

は今、私はすべてのchatacters 2×2に一致するようにしようとしていますff。何か案は?

+0

入力と出力の例をいくつか教えてください。 'xxd'(' hd'のような)出力はその出力に位置付けメタデータを持っています。 'sed'はそれほどうまくいくわけではありません。 Perlはどうですか? 'perl -pe 's/\ x01 [^ \ xff] * \ xff' //' –

+0

@AdamKatz xxdのオプション '-ps'を使用しました。 – iBug

+0

素晴らしいです。あなたは何をしようとしているのかを知るために入力と出力の例が必要です。文字コードに関連する正規表現['\ x01 [^ \ xFF] * \ xFF'](https://regex101.com/r/Ts0QpE/1)と一致するパターンを求めているようですが、完全に異なる正規表現は、 ''(?:..)*?(?!ff)(..) '](https://regex101.com/r/Ts0QpE/2)で満足されるかもしれません。 –

答えて

0

これはトリックを行う必要があります。

((..)|01([0-9a-e][0-9a-f]|[0-9a-f][0-9a-e])*ff)*

で、我々は、両方の第一または第二の数字は、Fであることができるではなく、いずれか16進数のペアを一致させます。周囲の状況では、一度に2つの文字をすべて一致させて、一致が偶数から始まるようにする必要があります。

明らかに、内部グループを実際に出力から削除するものを追加する必要があります。これは、正規表現エンジン固有のものです。私はこれを投稿した後で、単純なことはしません。

関連する問題