2016-08-09 16 views
1

私はを追加しようとしています。 Yバイト後のXバイトをbashを使用してバイナリファイルに追加します。以下のコードを使用してSED:特定のバイト位置の後に余分なバイトを追加する

正常に動作するようですが、それが失敗した(シフトがある)XFF

例に遭遇したとき:(とき907バイト

sed -r -i 's/^.{907}/&"\xaa"/' file.txt 

出力した後、1バイト(Xaaは)を追加するにはOK):

cat file.txt | od -t x1 -t c -Ad 

OK output

出力(ときOKではありません) :

sed -r -i 's/^.{907}/&"\xaa"/' file_2.txt 
cat file_2.txt | od -t x1 -t c -Ad 

NOT ok - Shift in the output

この問題が発生したとSEDのための代替手段がある場合に使用されている理由を任意のアイデア?

+2

'sed'がテキストファイル入力、バイナリではないと具体的に使用されます。 – Kusalananda

答えて

3

sedを使用してバイナリストリームを編集するのはあまりお勧めできません。 通常、バイナリストリームを16進ダンプで変換し、 を編集して元に戻します。そのような

$ hexdump -ve '1/1 "%.2X"' file1 \ 
| sed -r 's/^.{1814}/&aa/' \ 
| xxd -r -p > file2 

また、代わりにxxdのPerlを使用することができます。

| perl -e 'print pack "H*", <STDIN>' 
+0

+1、 'sed'はテキスト編集用です。 binary-> ascii変換にも 'xxd'を使うことができます。例:' xxd -p file1 | tr -d '\ n "\ – Thor

+0

変換するxxdの代替手段はありますか?私たちのRedhatサーバーにインストールされていないようです。私のVMでは問題なく動作し、必要な出力が得られます! +1 – Danjel

+0

@ダンジョール:はい。 Perl。私の更新を参照してください –

0

他の場所sedテキストファイルのみをサポートして述べたように。仕事のための最も便利なツールはsedと非常によく似ていますが、バイナリデータで動作するbbeBinary Block Editor)だと思います。あなたはあなたのケースでは-bスイッチ、-b 907:1で編集したいブロックを定義することから始め

は、より多くのオプションのためthe manualのページ3と4を参照してください。 bbe-eスイッチ(A \xaa)を使用してブロックで実行するコマンドを指定してください。多くのコマンドについては、the manualの5-8ページを参照してください。

をまとめる:

bbe -b 907:1 -e 'A \xaa' file.txt > modified_file.txt 

ブロックとしてファイル全体を使用する別の例:

bbe -e 'i 907 \xaa' file.txt > modified_file.txt 
+0

今日試して、それもうまく動作することを確認します。再度、感謝します。 – Danjel

+0

@ダンジジェル:あなたの質問が解決されたら、[最善の答えを受け入れる]ことを忘れないでください(http://stackoverflow.com/help/someone-answers)。 – Thor

関連する問題