Command-Line

嚴格逐行比較兩個文件,不插入或刪除

  • November 19, 2020

我有兩個文件,它們基本上包含十六進制格式的記憶體轉儲。目前我使用 diff 來查看文件是否不同以及差異在哪裡。然而,當試圖確定差異的確切位置(即記憶體地址)時,這可能會產生誤導。考慮以下並排顯示兩個文件的範例。

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

現在diff -u將顯示一個插入和一個刪除,儘管兩個文件之間有 3 行(記憶體位置)發生了變化:

0001
+FFFF
ABCD
1234
-FFFF

有沒有一種簡單的方法來比較這兩個文件,使得每一行只與另一個文件中的同一行(就行號而言)進行比較?所以在這個例子中,它應該報告最後 3 行已更改,以及從file1和更改的行file2。輸出不必是 diff 風格的,但如果它可以著色會很酷(目前我diff -u使用輸出著色sed以便可以輕鬆調整)。

這可能是一種方法:

diff <(nl file1) <(nl file2)

nl編號diff逐行辨識行的行。

改編自融合的答案,這在命令行中對我有用sort -n -k1,1 -s <(nl file1) <(nl file2)。在沒有安裝 meld 的地方很有用。

引用自:https://unix.stackexchange.com/questions/136380