Da bereits zwei Personen für die Schließung dieses Beitrags gestimmt haben, werde ich versuchen, die Frage so klar wie möglich zu formulieren. Eine Datei auf einem physischen Gerät wird als binäre Sequenz dargestellt. Das heißt, ich muss die Unterschiede zwischen den Darstellungen zweier Dateien auf einer solchen Ebene prüfen (d. h. ich muss die Unterschiede zwischen mehreren Bytes an derselben Position in zwei verschiedenen Dateien vergleichen) und diese Unterschiede in einem bash
Skript ausgeben.
Beispiel:
file1: 00000000 01010101 10101010 11001100 00110011
file2: 00000000 01010101 01010101 00110011 00110011
Das Skript sollte Folgendes ausgeben:
differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)
Oder so ähnlich.
Das erste, was ich tun muss, um dies zu erreichen, ist, zumindest in der Lage zu sein, eine Datei an einer bestimmten Position zu öffnen, ein Byte zu lesen und dieses Byte auszugeben/speichern. Ich könnte ein C
Programm dafür schreiben, abergibt es eine Möglichkeit, dies innerhalbbash
?
Antwort1
Sie können es versuchen cmp
. Dabei werden zwei Dateien Byte für Byte verglichen.
Ausman cmp
:
cmp - compare two files byte by byte
Allerdings muss die Anzahl der Zeilen in beiden Dateien gleich sein. Beachten Sie auch, dass cmp
nur auf den ersten Unterschied verwiesen wird. Um auf die nächsten Unterschiede zu verweisen, können Sie von Anfang an bestimmte Bytes überspringen.
$ cat foo
this is
a test
$ cat bar
this
is a test
$ cmp foo bar
foo bar differ: byte 5, line 1
$ cmp -b foo bar
foo bar differ: byte 5, line 1 is 40 12 ^J
Um die unterschiedlichen Bytewerte auszudrucken, verwenden Sie cmp -l
, von man cmp
:
-l, --verbose
output byte numbers and differing byte values
Antwort2
Sie können es mit Folgendem versuchen vimdiff
:
vimdiff -b file1 file2