严格逐行比较两个文件,不进行插入或删除

严格逐行比较两个文件,不进行插入或删除

我有两个文件,本质上包含十六进制格式的内存转储。目前我使用 diff 来查看文件是否不同以及差异在哪里。然而,当试图确定差异的确切位置(即内存地址)时,这可能会产生误导。考虑以下示例,并排显示两个文件。

file1:       file2:

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

现在diff -u将显示 1 次插入和 1 次删除,尽管两个文件之间已更改 3 行(内存位置):

 0001
+FFFF
 ABCD
 1234
-FFFF

是否有一种简单的方法来比较两个文件,使得每一行仅与另一个文件中的同一行(就行编号而言)进行比较?因此,在此示例中,它应该报告最后 3 行已更改,以及 和 中更改的file1file2。输出不一定是 diff 风格的,但如果它可以着色那就太酷了(目前我diff -u使用它对输出进行着色sed,以便可以轻松调整)。

答案1

这可能是一种方法:

diff <(nl file1) <(nl file2)

nl编号来diff逐行识别行。

答案2

改编自 meld 答案,这在命令行对我有用sort -n -k1,1 -s <(nl file1) <(nl file2)。在未安装 meld 的情况下很有用。

相关内容