Angenommen, wir wollen ein minimalistisches Ein-Byte pro ZeileASCIIHex-Dump. UnterLinuxmitGNU od
, das funktioniert:
echo foo | od -An -tx1 -w1 -v
Ausgabe:
66
6f
6f
0a
Aber das funktioniert nicht mitBSDDerivate, denn dieBSD od
util hat verschiedene Flags.
Was ist das tragbarste*nixMethode? Wenn das nicht klappt, was sind die besten verfügbaren Methoden?
Antwort1
od
ist ein Standardbefehl. In od -An -tx1 -w1 -v
ist die Option das einzige, was nicht POSIX ist -w
.
Sie können es ersetzen durch:
od -An -vtx1 | LC_ALL=C tr -cs '0-9a-fA-F' '[\n*]' | grep .
Das würde in jedem POSIX-kompatiblen System funktionieren und funktioniert zumindest unter FreeBSD:
$ echo test | od -An -vtx1 | LC_ALL=C tr -cs 0-9a-fA-F '[\n*]' | grep .
74
65
73
74
0a
Oder mit einem sed
Aufruf zum Ersetzen des tr
+ grep
:
od -An -vtx1 | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;/./!d
s/[[:blank:]]\{1,\}/\
/g'
(oder
od -An -vtx1 | sed -n 's/[[:blank:]]*\([^[:blank:]]\{2\}\)[[:blank:]]*/\1\
/g;s/\n$//p'
)
Mit perl
(kein POSIX-Befehl, aber überall verfügbar außer auf eingebetteten Systemen):
perl -ne '
BEGIN{$/ = \8192; $, = $\ = "\n"}
print unpack "(H2)*", $_'
Was in meinen Tests (im Vergleich zu GNU) für alles außer kleinen Dateien (auch als , nicht als ) auch od
mit großem Abstand das Schnellste der 3 ist .hexdump
vim
xxd
Antwort2
Vielleicht hexdump
:
$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a
Das ist original von BSDDas Handbuch dazu finden Sie hier (in BSD)..
Das oben gezeigte Beispiel wurde jedoch unter Linux ausgeführt.