如何忽略diff命令的一些差异?

时间:2010-12-13 23:01:57

标签: linux bash diff vimdiff

diff有一个选项-I regexp,它会忽略仅插入或删除与给定正则表达式匹配的行的更改。我需要对这种情况进行类比,当两行之间发生变化时(而不是插入或删除行)。

例如,对于给定的"abXd""abYd",我想忽略XY之间的所有差异。

似乎diff没有这种能力。 diff是否有合适的替代方案?

5 个答案:

答案 0 :(得分:22)

您可以通过sed过滤这两个文件,以消除您不关心的行。一般模式是/regex1/,/regex2/ d以删除与两个正则表达式匹配的行之间的任何内容。例如:

diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)

答案 1 :(得分:19)

John Kugelman对earlier solution的改进:

diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)

可能是您正在寻找的!此版本规范化每行的特定更改,而不删除行本身。这允许diff显示在线上保留的任何其他差异。

答案 2 :(得分:1)

假设X和Y是单个字符,那么-I 'ab[XY]d'对我来说很好。

答案 3 :(得分:1)

您可以使用sed将模式的实例替换为标准字符串:

diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)

答案 4 :(得分:1)

我的开源Linux工具'dif'在比较文件时忽略了各种差异。

它具有许多选项,可进行搜索/替换,忽略空格,注释或时间戳,对输入文件进行排序,忽略某些行等。

预处理输入文件后,它会在这些中间文件上运行Linux工具meld,gvimdiff,tkdiff,diff或kompare。

不需要安装,只需从https://github.com/koknat/dif下载并运行'dif'可执行文件

对于您的用例,请尝试搜索并替换选项:

./dif file1 file2 -search 'ab[XY]d' -replace 'abd' -diff