diff
有一个选项-I regexp
,它忽略仅插入或删除与给定正则表达式匹配的行的更改。当更改在两行之间(而不是插入或删除行)时,我需要一个类似的情况。
例如,对于给定的and ,我想忽略所有的差异,例如 between "abXd"
and 。"abYd"
X
Y
似乎diff
没有这种能力。有没有合适的替代品diff
?
您可以过滤这两个文件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)
可能是您正在寻找的东西!此版本标准化了每一行的特定更改,而不删除该行本身。这允许 diff 显示在线上剩余的任何其他差异。
假设 X 和 Y 是单个字符,那么-I 'ab[XY]d'
对我来说很好。
您可以使用 sed 用标准字符串替换模式的实例:
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
我的开源 Linux 工具 'dif' 比较文件,同时忽略各种差异。
它有很多选项可以进行搜索/替换、忽略空格、注释或时间戳、对输入文件进行排序、忽略某些行等。
在预处理输入文件后,它会在这些中间文件上运行 Linux 工具 meld、gvimdiff、tkdiff、diff 或 kompare。
不需要安装,只需从https://github.com/koknat/dif下载并运行“dif”可执行文件
对于您的用例,请尝试搜索和替换选项:
./dif file1 file2 -search 'ab[XY]d' -replace 'abd' -diff