2010-05-10 104 views
4

当进行递归差异时,我想忽略预期差异/翻译 - 是否有一种方法可以使用标准的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

这工作:

$ 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脚本将通过程序来构建(及具有较强的正则表达式)。

+0

是的,我想过,但问题是,我实际上需要递归地在文件目录上运行它。将更新问题。 – naumcho 2010-05-10 23:40:49

+0

这并不会改变每个文件任务的性质,即递归与否 - 在处理所有文件之前需要处理单个文件。 – msw 2010-05-10 23:43:54

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'似乎应该工作,虽然我不确定它在我测试时确实有用。