¿Cómo vuelco 'bits' binarios sin formato de un archivo, sin números de línea e interpretación ASCII?


4

¿Cómo vuelco una secuencia binaria "pura" y simple de bits?

Por ejemplo, tengo esto:

 0000000: 10001001 01010000 01001110 01000111 00001101 00001010  .PNG..
 0000006: 00011010 00001010 00000000 00000000 00000000 00001101  ......
 000000c: 01001001 01001000 01000100 01010010 00000000 00000000  IHDR..
 0000012: 00000010 01011000 00000000 00000000 00000001 10010000  .X....
 0000018: 00001000 00000010 00000000 00000000 00000000 11111101  ......
 000001e: 01010111 10001001 11001111 00000000 00000000 00000000  W.....
 0000024: 00000111 01110100 01001001 01001101 01000101 00000111  .tIME. 

Esos números de línea a la izquierda y el ASCII a la derecha son un problema para mí. Intenté esto para eliminarlo:

xxd -b /root/Desktop/image.png | sed -r "s/\d32{3,}.*//g" | sed "s/.*://" | sed "s/\d32//g"

Sin embargo, no tuve éxito:

 100010010101000001001110010001110000110100001010.PNG..
 000110100000101000000000000000000000000000001101......
 010010010100100001000100010100100000000000000000IHDR..
 000000100101100000000000000000000000000110010000.X....
 000010000000001000000000000000000000000011111101......
 010101111000100111001111000000000000000000000000W.....
 000001110111010001001001010011010100010100000111.tIME.

¿Existe una herramienta como 'xxd' o 'hexdump' o algo que pueda producir una secuencia binaria limpia de un archivo?

Por ejemplo,

 01010101000100100100010100100010000010101010101010101001011
 10101010101010100100101010101010100000010001000100001000000

¿En qué sistema operativo? Parece que estás ejecutando algún tipo de * nix pero ¿cuál? ¿Es Linux? UNIX? OSX? ¿Algo más?
terdon

@terdon Linux (Debian 7)
LearnerX

Uno pensaría -pque funcionaría para omitir números de línea y ASCII, pero solo funciona para salida hexadecimal, no binaria (como se indica en la página del manual: los interruptores de línea de comando -r, -p, -i no funcionan con este modo . ).
Peter Mortensen

Respuestas:


6

Es lo suficientemente simple para analizar la salida en el formato que desee:

xxd -b /root/Desktop/image.png | cut -d: -f 2 | sed 's/  .*//; s/ //g'

El cuteliminará los números de línea y el sed eliminará primero la última columna ( s/ .*//eliminará todo lo que viene después de dos espacios consecutivos) y luego eliminará todos los espacios individuales.

También puedes usar awk:

xxd -b ~/a.png | awk '{print $2$3$4$5$6$7}'

O Perl:

xxd -b ~/a.png | head -1 | perl -lane 'print join "",@F[1..6]'

O coreutils:

xxd -b ~/a.png | cut -d" " -f2-7 | tr -d ' '

Impresionante, eso lo hizo. Sigo diciéndome que aprenda 'awk' y 'sed' pero de alguna manera nunca lo hice. Empezaré a aprenderlo pronto.
LearnerX
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.