1行あたり1バイトの最小限の文字数が欲しいとしますアスキー16進ダンプ。リナックス使用してGNU od
、これは機能します:
echo foo | od -An -tx1 -w1 -v
出力:
66
6f
6f
0a
しかし、それはうまくいかないBSDA のデリバティブは、BSDA の od
util には異なるフラグがあります。
最も持ち運びやすいのは*nix方法はありますか? それができない場合、利用可能な最良の方法は何ですか?
答え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
または、1 回の呼び出しで+ を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)*", $_'
これは、私のテストでは 3 つの中で最も高速でした (GNU と比較した場合od
)。小さなファイル以外では大幅に高速です ( よりも高速でありhexdump
、 の よりも高速ではありませんvim
) xxd
。
答え2
多分hexdump
:
$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a
これはBSDから派生したものであるマニュアルはここにあります(BSD形式)。
ただし、上記の例は Linux で実行されました。