xxd texto examples convertir binario archivo linux command-line hexdump

linux - texto - Usando hexdump para generar solo ASCII



xxd command examples (4)

Estoy tratando de generar valores ASCII correspondientes a algunos datos binarios. He aplicado con éxito la utilidad hexdump para generar hexdump y ASCII lado a lado como se muestra a continuación:

00000120 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 33 30 | = 0x00000030| 00000130 0a 01 00 00 00 23 00 00 00 75 75 69 64 30 20 20 |.....#...uuid0 | 00000140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d | =| 00000150 20 30 78 39 30 38 32 61 63 35 61 0a 01 00 00 00 | 0x9082ac5a.....| 00000160 23 00 00 00 75 75 69 64 31 20 20 20 20 20 20 20 |#...uuid1 | 00000170 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 34 | = 0x74| 00000180 61 37 34 37 36 66 0a 01 00 00 00 23 00 00 00 75 |a7476f.....#...u| 00000190 75 69 64 32 20 20 20 20 20 20 20 20 20 20 20 20 |uid2 | 000001a0 20 20 20 20 20 3d 20 30 78 61 32 35 35 35 63 30 | = 0xa2555c0|

Sin embargo, me gustaría ver solo el ASCII como valores de salida. No me interesan los valores hexadecimales. Por ejemplo, la salida debe ser la siguiente (aprox. Correspondiente a lo anterior):

= 0x00000030.....#... uuid0=0x9082ac5a..... uuid1=0x74a7476f

(No he podido usar los interruptores de hd para esto).


Si bien la respuesta de raina77ow sobre el comando strings(1) es la forma correcta de obtener el resultado que realmente deseaba, la solicitud específica para aprovechar hexdump(1) para filtrar solo los caracteres imprimibles puede tener sentido en algunos contextos. Responderé a eso específicamente aquí.

La utilidad hexdump resulta compatible con un motor de formato sorprendentemente generalizado. Probablemente esto se hizo para que la implementación de los distintos formatos seleccionables sea más uniforme. Si su copia de hexdump expone ese motor (como muchos lo hacen) a través de la opción de línea de comando -e , entonces realmente puede hacer que haga lo que pidió.

La clave es la opción -e y el lenguaje de formato que admite. Ese lenguaje permite la especificación de cadenas de formato que consumen bytes de la entrada y producen texto. Un comando como:

$ hexdump -e "16 /"%_p/" /"//n/"" hexdump.exe | head -16

consumirá 16 bytes a la vez, los mostrará a través del formato %_p y agregará una nueva línea cada 16 bytes. Cada carácter no imprimible se sustituye por un . en la salida.

Otros formatos orientados a caracteres que se deben considerar son %_c y %_u . El primero reemplaza el carácter no imprimible con su secuencia de escape ANSI-C, o con un número octal de tres dígitos. El segundo reemplaza la no impresión de cada carácter con el nombre convencional del carácter de control ASCII, o por un número hexadecimal de dos dígitos.

Si su copia de hexdump carece de la opción -e , o es lenta, o si carece de una implementación de hexdump en absoluto, entonces vale la pena ver la implementación de hexdump recientemente lanzada por William Ahern con licencia generosa, rápida y razonablemente portátil. Debería compilarse para un montón de sistemas tipo Unix listos para usar, y con solo algunos ajustes menores se construye con MingW GCC en Windows. Un atributo clave de esta implementación es que el archivo de origen único puede construirse como una biblioteca compartida para su inclusión en otro programa, como un módulo Lua para usar desde Lua , así como un ejecutable independiente que implementa el comando hexdump .


Si solo necesita ver el contenido del texto de un archivo binario, las strings deberían ser útiles:

Para cada archivo dado, las strings GNU imprimen las secuencias de caracteres imprimibles que tienen al menos 4 caracteres (o el número dado con la opción -n ) y están seguidas de un carácter no imprimible. strings son principalmente útiles para determinar el contenido de archivos que no son de texto.


puedes usar od :

od -t c file

O awk con hexdump como es:

hexdump -C file | awk ''{for(i=NF; i>17; --i) print $i}''

Nota: tienes que cambiar el comando awk si cambias el número de columnas en hexdump.


hexdump -C file /dev/sda4|cut -c 62-77

Espero eso ayude