Volcado hexadecimal portátil de un byte por línea

Volcado hexadecimal portátil de un byte por línea

Supongamos que queremos un byte minimalista por línea.ASCIIvolcado hexadecimal. BajolinuxusandoÑU od, esto funciona:

echo foo | od -An -tx1 -w1 -v

Producción:

 66
 6f
 6f
 0a

Pero eso no funcionará conBSDderivados, porque elBSD odutil tiene diferentes banderas.

¿Cuál es el más portátil?*nada¿método? En su defecto, ¿cuáles son los mejores métodos disponibles?

Respuesta1

odes un comando estándar. En od -An -tx1 -w1 -v, lo único que no es POSIX es la -wopción.

Puedes reemplazarlo con:

od -An -vtx1 | LC_ALL=C tr -cs '0-9a-fA-F' '[\n*]' | grep .

Lo cual funcionaría en cualquier sistema compatible con POSIX y funciona al menos en FreeBSD:

$ echo test | od -An -vtx1 | LC_ALL=C tr -cs 0-9a-fA-F '[\n*]' | grep .
74
65
73
74
0a

O con una sedinvocación para reemplazar el tr+ grep:

od -An -vtx1 | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;/./!d
s/[[:blank:]]\{1,\}/\
/g'

(o

od -An -vtx1 | sed -n 's/[[:blank:]]*\([^[:blank:]]\{2\}\)[[:blank:]]*/\1\
/g;s/\n$//p'

)

Con perl(no es un comando POSIX pero es omnipresente en cualquier cosa que no sean sistemas integrados):

perl -ne '
  BEGIN{$/ = \8192; $, = $\ = "\n"}
  print  unpack "(H2)*", $_'

Que también es el más rápido de los 3 en mis pruebas (en comparación con GNU od) por un margen significativo para todo menos archivos pequeños (también que hexdump, no que vim) xxd.

Respuesta2

Tal vez hexdump:

$ echo foo | hexdump -v -e '1/1 "%02x\n"'
66
6f
6f
0a

Que es original de BSDsu manual está aquí (en BSD).

Sin embargo, el ejemplo mostrado arriba se ejecutó en Linux.

Respuesta3

xxdexiste en Linux,BSD, yOSX:

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

información relacionada