2012-11-08 12 views
18

Ich versuche, ASCII-Werte entsprechend einigen Binärdaten auszugeben. Ich habe erfolgreich angewendet, um die hexdump Dienstprogramm zur Ausgabe hexdump und ASCII Seite-an-Seite wie folgt:Verwenden von hexdump, um nur ASCII auszugeben

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| 

Allerdings würde ich nur die ASCII als Ausgangswerte sehen möchten. Ich bin nicht an den Hex-Werten interessiert. Zum Beispiel sollte die Ausgabe der folgenden sein (ca. dem obigen entspricht.):

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

(. Ich habe nicht in der Lage gewesen, die Schalter von hd für diesen Einsatz)

+0

Im 'cat' hilft, gibt es einige Nicht-ASCII-Werte. Ich möchte sie loswerden und ich dachte, das war der Weg zu gehen :( – recluze

+1

'Strings' funktioniert genau. Wenn Sie das als Antwort, kann ich es akzeptieren. – recluze

Antwort

28

Wenn Sie nur die Textinhalte von Binär-Datei, um sehen müssen, sollte strings nützlich sein:

Für jede Datei angegeben, GNU strings druckt das druckbare Zeichen Sequenzen, die aus mindestens 4 Zeichen (oder die Nummer gegeben mit der -n Option) und sind gefolgt von einem nicht druckbaren Zeichen. strings ist hauptsächlich nützlich, um den Inhalt von Nicht-Text Dateien zu bestimmen.

+0

Perfekt. Vielen Dank. – recluze

+0

Besser fügen Sie die' -n 'option, zB' strings -n 2 a.out | less -N', da standardmäßig nur char-Sequenzen mit der Länge> = 4 als String von 'strings' behandelt werden, also der Header' ELF' der Elf-Binärdatei nicht standardmäßig gedruckt –

5

Sie od verwenden können :

od -t c file 

Oder awk mit hexdump wie so:

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

Hinweis: Sie müssen den Befehl awk ändern, wenn Sie die Anzahl der Spalten in hexdump ändern.

8

Während die answer from raina77ow über den strings(1) Befehl, um den richtigen Weg ist, um das Ergebnis bekommen Sie eigentlich wollten, die spezifische Anforderung zu nutzen hexdump(1) nur druckbare Zeichen, um herauszuzufiltern kann sinnvoll in manchen Kontexten machen. Ich werde darauf speziell hier antworten.

Das Dienstprogramm hedddump unterstützt eine verallgemeinernde Formatierungs-Engine. Dies wurde wahrscheinlich getan, um die Implementierung der verschiedenen auswählbaren Formate einheitlicher zu machen. Wenn Ihre Kopie von hexdump diese Engine (wie es viele tun) über die Befehlszeilenoption -e verfügbar macht, dann können Sie tatsächlich tun, wonach Sie gefragt haben.

Der Schlüssel ist die -e Option und die Formatierungssprache, die es unterstützt. Diese Sprache ermöglicht die Angabe von Formatzeichenfolgen, die Bytes der Eingabe konsumieren und Text erzeugen. Ein Befehl wie:

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

16 Bytes zu einer Zeit verbraucht, so dass sie über das %_p Format anzuzeigen, und eine neue Zeile nach jedem 16. Byte hinzufügen. Jedes nicht druckbare Zeichen wird durch einen . in der Ausgabe ersetzt.

Weitere zeichenorientierte Formate sind %_c und %_u. Die erste ersetzt das nicht druckbare Zeichen durch ihre ANSI-C-Escape-Sequenz oder durch eine dreistellige Oktalzahl. Die zweite ersetzt Nicht-Drucken jedes Zeichens durch den herkömmlichen Namen des ASCII-Steuerzeichens oder durch eine zweistellige Hexadezimalzahl.

Wenn Sie Ihre Kopie von hexdump fehlt die -e Option, oder langsam ist, oder fehlt Ihnen eine Implementierung von hexdump überhaupt, dann die liberal lizenziert, schnell und angemessen portable Implementierung von hexdump kürzlich released by William Ahern lohnt ein Blick auf. Es sollte für viele Unix-ähnliche Systeme aus der Box gebaut werden, und mit nur geringen Verbesserungen wird es mit MingW GCC unter Windows erstellt. Ein Schlüsselattribut dieser Implementierung besteht darin, dass die einzelne Quelldatei als eine gemeinsam genutzte Bibliothek zum Einfügen in ein anderes Programm, als ein Lua-Modul zur Verwendung von Lua, sowie als eine eigenständige ausführbare Datei, die den hexdump-Befehl implementiert, erstellt werden kann.

+0

Sie können '' 'durch' '' ersetzen und vermeiden, zu entkommen, sieh dir an: 'hexdump -e '16"% _p "" \ n "'' – Bacher

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

Hoffe, dass es

Verwandte Themen