1行あたり1バイトのミニマリストが必要だとします[〜#〜] ascii [〜#〜] 16進ダンプ。 Linux using [〜#〜] gnu [〜#〜]od
では、これは機能します。
echo foo | od -An -tx1 -w1 -v
出力:
66
6f
6f
0a
しかし、それは[〜#〜] bsd [〜#〜]派生物では機能しません。[〜#〜] bsd [〜#〜]od
utilにはさまざまなフラグがあります。
最も移植性の高い* nixメソッドは何ですか?それができない場合、利用可能な最善の方法は何ですか?
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
)以下。
多分hexdump
:
$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a
これはBSDからのオリジナルです そのマニュアルはここにあります(BSDで) 。
ただし、上記の例はLinuxで実行されました。
xxd
はLinuxに存在し、 [〜#〜] bsd [〜#〜] 、および [〜#〜] osx [〜#〜] :
echo foo | xxd -p -c 1
66
6f
6f
0a