wake-up-neo.com

Verwenden von Hexdump nur zur Ausgabe ASCII

Ich versuche, ASCII -Werte auszugeben, die einigen binären Daten entsprechen. Ich habe das Dienstprogramm hexdump erfolgreich angewendet, um hexdump und ASCII nebeneinander wie folgt 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|

Ich möchte jedoch nur die ASCII als Ausgabewerte sehen. Ich interessiere mich nicht für die Hex-Werte. Zum Beispiel sollte die Ausgabe die folgende sein (ungefähr entsprechend der obigen Angabe): 

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

(Ich konnte die Schalter von hd hierfür nicht verwenden.)

21
recluze

Wenn Sie nur den Textinhalt der Binärdatei anzeigen müssen, sollte strings nützlich sein:

Für jede angegebene Datei gibt GNU strings das druckbare Zeichen .__ aus. Sequenzen mit einer Länge von mindestens 4 Zeichen (oder der angegebenen Zahl mit der Option -n), gefolgt von einem nicht druckbaren Zeichen . strings ist vor allem zur Bestimmung des Inhalts von Nicht-Text nützlich Dateien.

32
raina77ow

Während der Befehl Antwort von raina77ow über den Befehl strings(1) der richtige Weg ist, um das gewünschte Ergebnis zu erhalten, kann die spezielle Anforderung, hexdump(1) zum Ausfiltern nur von druckbaren Zeichen zu verwenden, in einigen Fällen Sinn machen Kontexte. Ich werde hier speziell darauf eingehen.

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

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

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

verbraucht jeweils 16 Bytes, zeigt sie über das %_p-Format an und fügt nach jedem 16. Byte eine neue Zeile hinzu. Jedes nicht druckbare Zeichen wird in der Ausgabe durch einen . ersetzt. 

Weitere zeichenorientierte Formate sind %_c und %_u. Ersteres ersetzt nicht druckbare Zeichen durch ihre ANSI-C-Escape-Sequenz oder durch eine dreistellige Oktalzahl. Der zweite ersetzt nicht druckbare Zeichen durch den herkömmlichen Namen des Steuerzeichens ASCII oder durch eine zweistellige Hexadezimalzahl.

Wenn Ihre Kopie von hexdump nicht über die Option -e verfügt oder langsam ist oder wenn Sie hexdump überhaupt nicht implementieren, ist die liberal lizenzierte, schnelle und einigermaßen tragbare Implementierung von hexdump in letzter Zeit von William Ahern wert anschauen. Es sollte für viele Unix-artige Systeme sofort einsatzbereit sein, und mit nur geringfügigen Verbesserungen wird es mit MingW GCC unter Windows erstellt. Ein Schlüsselmerkmal dieser Implementierung ist, dass die einzelne Quelldatei als gemeinsam genutzte Bibliothek zur Aufnahme in ein anderes Programm, als Lua-Modul für die Verwendung von Lua sowie als eigenständige ausführbare Datei, die den Befehl hexdump implementiert, erstellt werden kann .

8
RBerteig

sie können od verwenden:

od -t c file

Oder awk mit hexdump wie folgt:

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.

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

Ich hoffe es hilft

0
Ahtisham Wani