コマンドラインで16進ダンプに似た形式(バイナリ文字列を含む)を実装しますか?

コマンドラインで16進ダンプに似た形式(バイナリ文字列を含む)を実装しますか?

hexdump特にカスタムフォーマットを定義できるので、本当に気に入ります。

$ echo -e '\x00\x01\x02\x03' | hexdump -v -e '1/1 "%_ad: "' -e '4/1 "%02X "' -e '1/1 " : "' -e '4/1 "%_p"' -e '1/1 "\n"'
0: 00 01 02 03 : ....
4: 0A          : .

したがって、1行に4バイトを選択し、最初に16進数で書き、次に文字として書き込むことができます。ただし、ここで欠落しているのは、「バイナリ文字列」(または「ビット文字列」)書式指定文字です。たとえば-e '4/1 "%08b "'、コマンドラインのどこかに何かを書きたいと思います。

0: 00 01 02 03 : 00000000 00000001 00000010 00000011 : ....
4: 0A          : 00001010 : .

もちろん、エンディアン(1バイト以上のグループをフォーマットする必要がある場合)などを指定する必要があるかもしれません。しかし、とにかくマニュアルで見ることができる限り、そのような形式はhexdump存在しません。

だから私の質問は - 上記のバイナリ文字列を含みますが、そのオプションを使用するときにプログラムのカスタマイズ可能性を最大範囲hexdump(バイトのグループ化の観点から)に保つ形式化されたダンプを取得できるように、Linuxコマンドラインにどのような代替策がありますか-e

ベストアンサー1

ダンププログラムが適切なダンプオプションで機能しない場合は、両方を使用してから貼り付けを使用して出力を結合して、いつでも一緒にスライスできhexdumpますxdd。きれいではありませんが、プロセス置換をサポートするシェルを使用してください(bash大丈夫でしょう)。

mkfifo fifo
echo -e '\x00\x01\x02\x03' |
  tee fifo |
  paste -d' ' \
    <(hexdump -v -e '1/1 "%_ad: "' -e '4/1 "%02X "' -e '1/1 " :\n"') \
    <(xxd -b -c 4 fifo | cut -d' ' -f 2-)

出力:

0: 00 01 02 03 : 00000000 00000001 00000010 00000011  ....
4: 0A          : 00001010                             .

おすすめ記事