Wie kann ich rohe binäre "Bits" aus einer Datei ohne Zeilennummern und ASCII-Interpretation ausgeben?

2505
learnerX

Wie kann ich eine "reine" und einfache binäre Bitfolge abspeichern?

Zum Beispiel habe ich folgendes:

 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.  

Diese Zeilennummern links und die ASCII-Zeichen rechts sind ein Problem für mich. Ich habe dies versucht, um es zu entfernen:

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

Es gelang mir jedoch nicht:

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

Gibt es ein Tool wie 'xxd' oder 'hexdump' oder etwas, das eine saubere Binärsequenz aus einer Datei erzeugen könnte?

Zum Beispiel,

 01010101000100100100010100100010000010101010101010101001011 10101010101010100100101010101010100000010001000100001000000 
4
Auf welchem ​​Betriebssystem? Es sieht so aus, als würden Sie eine Art * nix laufen lassen, aber welche? Ist es Linux? UNIX? OSX? Etwas anderes? terdon vor 9 Jahren 0
@terdon Linux (Debian 7) learnerX vor 9 Jahren 0
Man könnte meinen, das -p würde funktionieren, wenn man Zeilennummern und ASCII weglässt, aber es funktioniert nur für die hexadezimale Ausgabe, nicht für die binäre (wie auf der Manpage angegeben): * Die Befehlszeile wechselt -r, -p, -i do funktioniert nicht mit diesem Modus. *). Peter Mortensen vor 6 Jahren 0

1 Antwort auf die Frage

4
terdon

Es ist einfach genug, um die Ausgabe in das gewünschte Format zu parsen:

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

Das cutentfernt die Zeilennummern und der sed entfernt zuerst die letzte Spalte ( s/ .*//entfernt alles, was nach zwei aufeinanderfolgenden Leerzeichen kommt) und entfernt dann alle einzelnen Leerzeichen.

Sie könnten auch verwenden awk:

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

Oder Perl:

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

Oder coreutils:

xxd -b ~/a.png | cut -d" " -f2-7 | tr -d ' ' 
Toll, das hat es geschafft. Ich sage mir immer, dass ich 'awk' und 'sed' lernen soll, aber irgendwie habe ich es nie getan. Ich werde es bald lernen. learnerX vor 9 Jahren 0