hexdump出力からAからBへの「grep-ing」

hexdump出力からAからBへの「grep-ing」

hexdump状況は次のとおりです。出力で文字列Aと文字列Bの間のバイトを見つける必要があります。 16進ダンプは次のように構成されています。

-random bytes
-A + useful bytes + B
-random bytes
-A + useful bytes + B
-random bytes

今質問は: - 「AからBへ」grepは可能ですか?マニュアルページやインターネットではこのような内容を見ることはできません。手動で行うことができることを知っていますが、スクリプトを作成する必要があります。 - 行番号なしで16進ダンプ出力を表示できますか?合理的なようですが、まだ方法が見つかりませんでした。

ありがとうございます!

編集:ループバックデバイスから削除された2つのJPEG画像を復元しようとしているので、すべての出力を表示することはできませんが(非常に長いです)、ここにその一部があります。

0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
[...]
0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00

標準によると、JPEGファイルは0xff 0xd8で始まり、0xff 0xd9で終わるので、これら2つの文字列間のすべての情報を取得したいと思います。 (この方法はうまくいくべきだと思いますが、まだテストしていません。)

答え1

言及したように、厳密にバイナリに保つ方が良い考えでしょう。ここ bbe作業のためのツールのようです。次のコマンドは、ゼロパディングされたデジタルファイルにJPEGを書き込みます。

bbe -s -b '/\xff\xd8/:/\xff\xd9/' -e 'w %05B.jpg' > /dev/null

答え2

未テスト

awk '
  /ff d8/ || ($2 == "d8" && ff_prevline) {p = 1}
  p {print}
  /ff d9/ || ($2 == "d9" && ff_prevline) {p = 0}
  {ff_prevline = ($NF == "ff")}
'

答え3

1つの方法はを使用することです。行番号の間と行番号のないバイト範囲のみをperl出力します。ff 8dff 9d

次のデータは次のとおりですinfile

0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00

次のperl行を実行してください。

perl -ne '
    if ( (my $start = m/ff\sd8/) .. (my $end = m/ff\sd9/) ) { 
        s/\S*\s//; 
        s/\A.*(?=ff\sd8)// if $start; 
        s/(?<=ff\sd9).*\Z// if $end; 
        print 
    }
' infile

これにより、次の出力が提供されます。

ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01                                                                                                                                                                                              
00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a                                                                                                                                                                                              
3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32                                                                                                                                                                                              
e8 26 8f ff d9

関連情報