diff
有一个选项-I regexp
,它忽略只插入或删除与给定正则表达式匹配的行的更改。在两行之间进行更改(而不是插入或删除行)时,我需要对此进行类比。如何忽略差异命令中的一些差异?
例如,我想忽略"abXd"
和"abYd"
之间的所有差异,给定的X
和Y
。
看来diff
还没有这样的能力。 diff
有没有合适的替代品?
diff
有一个选项-I regexp
,它忽略只插入或删除与给定正则表达式匹配的行的更改。在两行之间进行更改(而不是插入或删除行)时,我需要对此进行类比。如何忽略差异命令中的一些差异?
例如,我想忽略"abXd"
和"abYd"
之间的所有差异,给定的X
和Y
。
看来diff
还没有这样的能力。 diff
有没有合适的替代品?
您可以通过sed
过滤这两个文件,以消除您不关心的行。一般模式是/regex1/,/regex2/ d
删除匹配两个正则表达式的行之间的任何东西。例如:
diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)
假设X和Y是单个字符,那么-I 'ab[XY]d'
适合我。
而对我来说太。 – user2023370 2013-09-16 20:46:04
这完全忽略了这条线。如果您关心的线路中存在其他差异,则会隐藏它们。 – CoatedMoose 2013-10-24 23:16:29
在改进了earlier solution约翰Kugelman:
diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)
可能是你可能会寻找!此版本将每行上的特定更改标准化,而不删除行本身。这允许diff显示任何其他仍然存在的差异。
你可以使用SED一个标准的字符串替换模式的实例:
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
感谢您的回答。 'sed'/ regex/d'file'删除'file'中出现匹配'regex'的所有行。有没有办法删除行,但只有它的匹配部分? – Vahagn 2010-12-14 07:41:21
我不确定你想要做什么。你能用一个你想要区分的两个文件的例子来编辑你的问题吗?你想要结果是什么? – 2010-12-14 16:58:35
不幸的是,这对于递归('-r')diff不起作用,原因很明显。 – 2017-01-20 09:41:16