忽略差异的具体差异

时间:2010-05-10 23:23:20

标签: shell diff

在进行递归差异时,我想忽略预期的差异/翻译 - 有没有办法用标准的unix工具做到这一点?

E.g。

file1:
1 ...
2 /path/to/something/ver1/blah/blah
3 /path/to/something/ver1/blah/blah
4 ...

file2:
1 ...
2 /path/to/something/ver2/blah/blah
3 /path/to/something/ver3/blah/blah
4 ...

我希望能够做到这样的事情:

diff file1 file2 --ignore-transltion "ver1>ver2"

这应该只显示第3行是不同的

有谁知道这样做的好方法?我可以轻松编写一个perl脚本来完成它,但我最终会重新实现'diff'的大部分功能。

更新:我的目标是在具有“diff -r”的相同文件的不同版本的目录上运行此目的,以便我可以发现版本中的意外差异。

2 个答案:

答案 0 :(得分:2)

这有效:

$ sed  -e 's/who/what/g' -e 's/fido/kitty/g' /etc/services | diff - /etc/services
38c38
< whatis    43/tcp      nicname
---
> whois     43/tcp      nicname
183c183
< what      513/udp     whatd
---
> who       513/udp     whod
568c568
< binkp     24554/tcp   # binkp kittynet protocol
---
> binkp     24554/tcp   # binkp fidonet protocol
...

您的sed脚本将由程序构建(并具有更强的正则表达式)。

答案 1 :(得分:1)

我拥有的diff版本(GNU diffutils 2.8.1)支持diff -I

-I RE  --ignore-matching-lines=RE
       Ignore changes whose lines all match RE.

它可能不是您想要的,但在您的问题的具体情况中,diff -I'/path/to/something/ver[12]/blah/blah'似乎应该可以工作,虽然我不确定它在我测试时确实有效。