Поскольку два человека уже проголосовали за закрытие этого поста, я постараюсь прояснить этот вопрос настолько четко, насколько это возможно. Файл на физическом устройстве представлен в виде двоичной последовательности. При этом мне нужно проверить различия между представлениями двух файлов на таком уровне (т. Е. Мне нужно сравнить различия между несколькими байтами в одной и той же позиции в двух разных файлах) и вывести такие различия. в bash
сценарии.
Пример:
file1: 00000000 01010101 10101010 11001100 00110011
file2: 00000000 01010101 01010101 00110011 00110011
Сценарий должен вывести:
differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)
Или что-то в этом роде.
Итак, первое, что мне нужно сделать, чтобы добиться этого, - это, по крайней мере, иметь возможность открыть файл в определенной позиции и прочитать один байт и вывести / сохранить такой байт. Я мог бы написать C
программу для этого, но есть ли способ сделать это в bash
?
Можно попробовать cmp
. Это сравнит два байта файлов байтом.
От man cmp
:
cmp - compare two files byte by byte
, Хотя количество строк должно быть, равняется на двух файлах. Также обратите внимание, что cmp
укажет на первое различие только, для указания на следующие различия, можно пропустить определенные байты от запуска.
$ 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
Для печати отличающегося байта оценивает использование cmp -l
, от man cmp
:
-l, --verbose
output byte numbers and differing byte values
Можно попробовать vimdiff
:
vimdiff -b file1 file2