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

diff有一个选项-I regexp ,它忽略只插入或删除与给定正则expression式匹配的行的更改。 我需要一个类似于这种情况,当两行之间的变化(而不是插入或删除行)。

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

似乎diff没有这样的能力。 有什么合适的替代diff

Solutions Collecting From Web of "如何忽略差异命令的一些差异?"

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

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

John Kugelman 先前解决方案的改进:

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

可能是你可能正在寻找! 这个版本规范化每一行的具体变化,而不删除行本身。 这允许差异显示线上剩余的任何其他差异。

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

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

假设X和Y是单个字符,那么-I 'ab[XY]d'适合我。