由於已經有兩個人投票結束這篇文章,我將盡力使問題盡可能清楚。實體設備上的檔案表示為二進位序列。話雖這麼說,我需要做的是檢查兩個檔案在這種層級的表示之間的差異(即我需要比較兩個不同檔案中同一位置上的多個位元組之間的差異),並輸出這些差異在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
, from man cmp
:
-l, --verbose
output byte numbers and differing byte values
答案2
您可以嘗試使用vimdiff
:
vimdiff -b file1 file2