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 od
util 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
od
es un comando estándar. En od -An -tx1 -w1 -v
, lo único que no es POSIX es la -w
opció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 sed
invocació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.