2010-05-10 141 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'似乎應該工作,雖然我不確定它在我測試時確實有用。