2010-05-10 19 views
4

Lorsque vous faites des diffs récursifs, je veux ignorer les différences/traductions attendues - existe-t-il un moyen de le faire avec les outils Unix standard?Ignorer les différences spécifiques dans diff

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 ... 

Je veux être capable de faire quelque chose comme:

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

devrait afficher seulement me montrer que la ligne 3 est différent

Est-ce que quelqu'un sait d'une bonne façon de le faire? Je peux facilement écrire un script Perl pour le faire mais je finirai par ré-implémenter la plupart des autres fonctionnalités de 'diff'.

Mise à jour: Mon but est d'exécuter ceci sur des répertoires avec différentes versions des mêmes fichiers avec "diff -r" afin que je puisse repérer des différences inattendues dans les versions.

Répondre

2

Cela fonctionne:

$ 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 
... 

Si votre script sed serait construit par un programme (et ont regexps plus forts).

+0

Oui, j'ai pensé à cela, mais le problème est que j'ai vraiment besoin de l'exécuter sur des répertoires de fichiers récursivement. Mettra à jour la question. – naumcho

+0

Cela ne change pas la nature de la tâche par fichier, qui - récursive ou non - doit gérer un seul fichier avant de traiter tous les fichiers. – msw

1

La version de diff je (GNU diffutils 2.8.1) prend en charge diff -I:

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

Il pourrait ne pas être exactement ce que vous voulez, mais dans le cas spécifique de votre question, diff -I'/path/to/something/ver[12]/blah/blah' semble comme il se doit travailler, même si je ne suis pas sûr que cela fonctionne vraiment quand je l'ai testé.