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.)
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.
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 .
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.
hexdump -C file /dev/sda4|cut -c 62-77
Ich hoffe es hilft