我有两个文件,本质上包含十六进制格式的内存转储。目前我使用 diff 来查看文件是否不同以及差异在哪里。然而,当试图确定差异的确切位置(即内存地址)时,这可能会产生误导。考虑以下示例,并排显示两个文件。
file1: file2:
0001 | 0001
ABCD | FFFF
1234 | ABCD
FFFF | 1234
现在diff -u
将显示 1 次插入和 1 次删除,尽管两个文件之间已更改 3 行(内存位置):
0001
+FFFF
ABCD
1234
-FFFF
是否有一种简单的方法来比较两个文件,使得每一行仅与另一个文件中的同一行(就行编号而言)进行比较?因此,在此示例中,它应该报告最后 3 行已更改,以及 和 中更改的file1
行file2
。输出不一定是 diff 风格的,但如果它可以着色那就太酷了(目前我diff -u
使用它对输出进行着色sed
,以便可以轻松调整)。
答案1
这可能是一种方法:
diff <(nl file1) <(nl file2)
用nl
编号来diff
逐行识别行。
答案2
改编自 meld 答案,这在命令行对我有用sort -n -k1,1 -s <(nl file1) <(nl file2)
。在未安装 meld 的情况下很有用。