由于已经有两个人投票关闭此帖子,我将尝试尽可能清楚地说明问题。物理设备上的文件表示为二进制序列。话虽如此,我需要做的是在这种级别上检查两个文件表示之间的差异(即我需要比较两个不同文件中同一位置的多个字节之间的差异),并在脚本中输出这些差异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
?
答案1
你可以尝试一下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
答案2
您可以尝试vimdiff
:
vimdiff -b file1 file2