忽略差异性能够进行 diff 操作吗?

4

当进行递归差异比较时,我希望忽略预期的差异/翻译——是否有一种方法可以使用标准的Unix工具来实现这一点?

例如:

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"

我希望这能仅显示第三行不同的内容。

有人知道一个好方法吗?我可以轻松地编写一个 Perl 脚本来完成,但最终我将重新实现 'diff' 的大部分功能。

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

2个回答

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脚本将由程序构建(并具有更强的正则表达式)。


是的,我考虑过了,但问题是我实际上需要递归地在文件目录上运行它。我会更新问题的。 - naumcho
这并不改变每个文件任务的本质,无论是否递归,都需要在处理所有文件之前处理单个文件。 - msw

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' 看起来应该可以工作,尽管我在测试时不确定它是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接