1行に最低限の1バイトが欲しいとしましょう。ASCIIコード16進ダンプ。下にLinux使用牛に似た一種の栄養 od
、これは動作します:
echo foo | od -An -tx1 -w1 -v
出力:
66
6f
6f
0a
しかし、これはうまくいきませんBSDデリバティブのためBSD od
util には別のフラグがあります。
携帯性が最高のものは何ですか?*ニックスどのように?失敗した場合の最善のアプローチは何ですか?
答え1
od
標準コマンドです。od -An -tx1 -w1 -v
POSIX以外の唯一のものは-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
置き換えます。tr
grep
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
)、速度が大きいという利点があります。vim
xxd
答え2
おそらくhexdump
:
$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a
これはBSDのオリジナルバージョンです。マニュアルはこちら(BSD版)。
しかし、上記の例はLinuxで実行されています。