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


13

我有两个文件,它们实质上包含十六进制格式的内存转储。目前,我使用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以便可以轻松地对其进行修改)。

Answers:


18

这可能是一种方法:

diff <(nl file1) <(nl file2)

使用nl数字的行可以diff逐行识别行。


3
太酷了,我不知道nl程序。这些unix工具确实很方便,但是有很多
Fritz 2014年

1
我只是试过了,不幸的是,我得到的是:第一个文件的每一行,然后是第二个文件的每一行...而不是文件1的第1行,然后是文件2的第1行,然后是第2行从文件1,然后是文件2的第2行...
Michael Hewson

@MichaelHewson听起来您的两个文件没有共同点。在这种情况下,这就是diff工作原理。您可以尝试gui程序meld,该程序并排显示两个文件。如meld <(nl file1) <(nl file2)
Fritz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.