ポータブルラインあたり1バイトの16進ダンプ

ポータブルラインあたり1バイトの16進ダンプ

1行に最低限の1バイトが欲しいとしましょう。ASCIIコード16進ダンプ。下にLinux使用牛に似た一種の栄養 od、これは動作します:

echo foo | od -An -tx1 -w1 -v

出力:

 66
 6f
 6f
 0a

しかし、これはうまくいきませんBSDデリバティブのためBSD odutil には別のフラグがあります。

携帯性が最高のものは何ですか?*ニックスどのように?失敗した場合の最善のアプローチは何ですか?

答え1

od標準コマンドですod -An -tx1 -w1 -vPOSIX以外の唯一のものは-wオプションです。

次に変更できます。

od -An -vtx1 | LC_ALL=C tr -cs '0-9a-fA-F' '[\n*]' | grep .

すべてのPOSIX互換システム、そして少なくともFreeBSDで動作します。

$ echo test | od -An -vtx1 | LC_ALL=C tr -cs 0-9a-fA-F '[\n*]' | grep .
74
65
73
74
0a

または+を単一の呼び出しにsed置き換えます。trgrep

od -An -vtx1 | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;/./!d
s/[[:blank:]]\{1,\}/\
/g'

(または

od -An -vtx1 | sed -n 's/[[:blank:]]*\([^[:blank:]]\{2\}\)[[:blank:]]*/\1\
/g;s/\n$//p'

)

使用しますperl(POSIX コマンドではありませんが、組み込みシステムを除くすべてのシステムでどこでも使用可能).

perl -ne '
  BEGIN{$/ = \8192; $, = $\ = "\n"}
  print  unpack "(H2)*", $_'

また、私のテストでは(GNUと比較して)3つのうち最も速くてod小さいファイルを除外すると(これもそうではありませんhexdump)、速度が大きいという利点があります。vimxxd

答え2

おそらくhexdump

$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a

これはBSDのオリジナルバージョンです。マニュアルはこちら(BSD版)

しかし、上記の例はLinuxで実行されています。

答え3

xxdLinuxに存在し、BSDOSX:

echo foo | xxd -p -c 1
66
6f
6f
0a

関連情報