Portabler Hex-Dump mit einem Byte pro Zeile

Portabler Hex-Dump mit einem Byte pro Zeile

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 odutil hat verschiedene Flags.

Was ist das tragbarste*nixMethode? Wenn das nicht klappt, was sind die besten verfügbaren Methoden?

Antwort1

odist ein Standardbefehl. In od -An -tx1 -w1 -vist 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 sedAufruf 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 odmit großem Abstand das Schnellste der 3 ist .hexdumpvimxxd

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.

Antwort3

xxdexistiert in Linux,BSD, UndOSX:

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

verwandte Informationen