Como eu despejo 'bits' binários brutos de um arquivo, sem números de linha e interpretação ASCII?

3

Como eu despejo uma sequência binária "pura" e simples de bits?

Por exemplo, eu tenho isso:

 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. 

Esses números de linha à esquerda e o ASCII à direita são um problema para mim. Eu tentei isso para removê-lo:

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

No entanto, não consegui:

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

Existe uma ferramenta como 'xxd' ou 'hexdump' ou algo que poderia produzir uma seqüência binária limpa a partir de um arquivo?

Por exemplo,

 01010101000100100100010100100010000010101010101010101001011
 10101010101010100100101010101010100000010001000100001000000
    
por learnerX 29.03.2015 / 14:46

1 resposta

4

É simples o suficiente para analisar a saída no formato desejado:

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

O cut removerá os números de linha e o sed removerá primeiro a última coluna ( s/ .*// removerá tudo o que vier depois de dois espaços consecutivos) e, em seguida, removerá todos os espaços.

Você também pode usar awk :

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

Ou Perl:

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

Ou coreutils:

xxd -b ~/a.png | cut -d" " -f2-7 | tr -d ' '
    
por 29.03.2015 / 14:59