J'ai deux fichiers de configuration, l'original du gestionnaire de paquets et un personnalisé modifié par moi-même. J'ai ajouté quelques commentaires pour décrire le comportement.
Comment puis-je exécuter diff
sur les fichiers de configuration, en ignorant les commentaires? Une ligne commentée est définie par:
- espaces optionnels principaux (onglets et espaces)
- signe de hachage (
#
) - autre chose
L'expression régulière (la plus simple) ignorant la première condition serait #.*
. J'ai essayé l' option --ignore-matching-lines=RE
( -I RE
) de GNU diff 3.0, mais je ne pouvais pas la faire fonctionner avec cette RE. J'ai aussi essayé .*#.*
et .*\#.*
sans chance. Mettre littéralement la ligne ( Port 631
) comme RE
ne correspond à rien, cela n'aide pas non plus de mettre le RE entre les barres obliques.
Comme suggéré dans l' outil “diff”, la saveur de regex semble manquer? , J'ai essayé grep -G
:
grep -G '#.*' file
Cela semble correspondre aux commentaires, mais cela ne fonctionne pas diff -I '#.*' file1 file2
.
Alors, comment utiliser cette option? Comment puis-je faire diff
sauter certaines lignes (dans mon cas, les commentaires)? Ne suggérez pas grep
le fichier et ne comparez pas les fichiers temporaires.
diff -I
ne me comporte pas comme prévu. J'ai mis à jour ma réponse avec un exemple qui clarifiait ce comportement pour moi.
-I
option ne permet d’ignorer un bloc que si toutes ses lignes correspondent à l’expression rationnelle. Ainsi, vous pouvez ignorer un changement de commentaire uniquement de cette manière, mais pas les changements de commentaire qui se rapprochent d'un changement sans commentaire.