Как мне выгружать необработанные двоичные «биты» из файла без номеров строк и интерпретации ASCII?

2445
learnerX

Как вывести «чистую» и простую двоичную последовательность битов?

Например, у меня есть это:

 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.  

Эти номера строк слева, а ASCII справа - проблема для меня. Я попробовал это, чтобы удалить это:

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

Однако мне это не удалось

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

Существует ли такой инструмент, как «xxd» или «hexdump» или что-то, что может создать чистую двоичную последовательность из файла?

Например,

 01010101000100100100010100100010000010101010101010101001011 10101010101010100100101010101010100000010001000100001000000 
3
На какой операционной системе? Похоже, вы используете какой-то * nix, но какой? Это Linux? UNIX? OSX? Что-то другое? terdon 9 лет назад 0
@terdon Linux (Debian 7) learnerX 9 лет назад 0
Можно было бы подумать, что `-p` будет работать для пропуска номеров строк и ASCII, но он работает только для шестнадцатеричного вывода, а не для двоичного (как отмечено на странице man: * Командная строка переключает -r, -p, -i do не работает с этим режимом. *). Peter Mortensen 7 лет назад 0

1 ответ на вопрос

4
terdon

It's simple enough to parse the output into the format you want:

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

The cut will remove the line numbers and the sed will first remove the last column (s/ .*// will remove everything that comes after two consecutive spaces) and then removes all single spaces.

You could also use awk:

xxd -b ~/a.png | awk '' 

Or Perl:

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

Or coreutils:

xxd -b ~/a.png | cut -d" " -f2-7 | tr -d ' ' 
Круто, что сделал это. Я продолжаю говорить себе, чтобы выучить «awk» и «sed», но почему-то я просто никогда этого не делал. Я скоро начну изучать это. learnerX 9 лет назад 0

Похожие вопросы