Игнорирование специфических различий в diff - PullRequest
4 голосов
/ 11 мая 2010

При выполнении рекурсивных различий я хочу игнорировать ожидаемые различия / переводы - есть ли способ сделать это стандартными инструментами 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"

Это должно показать только показать мне, что строка 3 отличается

Кто-нибудь знает хороший способ сделать это? Я могу легко написать Perl-скрипт для этого, но в конечном итоге я буду реализовывать большую часть остальной функциональности 'diff'.

Обновление: моя цель - запустить это для каталогов с разными версиями одних и тех же файлов с помощью "diff -r", чтобы я мог обнаружить неожиданные различия в версиях.

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Это работает:

$ 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 голос
/ 28 октября 2013

Имеющаяся у меня версия 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' похоже, что оно должно работать, хотя я не уверен, что оно действительно работает, когда я проверяю его.

...