La commande diff
a l'option --ignore-matching-lines = RE
. En regardant l'homme, il dit "ignorer les changements où toutes les lignes correspondent à RE" et il semble ignorer quand les différences correspondent à l'expression régulière.
De plus, traduction japonaise dit: «Ignorez les modifications qui ne font qu'insérer ou supprimer des lignes qui correspondent à REGEXP. ".
Je pense que ce sont des expressions assez trompeuses. (Je ne sais pas ce que je veux dire en le relisant après l'avoir compris ...) Cette section décrit le comportement exact de cette option.
Considérez la différence entre les deux fichiers suivants.
file1.txt
Date: 2020/4/7
Time: 20:00:00
file2.txt
Date: 2020/4/6
Time: 21:00:00
Si vous prenez diff
normalement
$ diff file1.txt file2.txt
1,2c1,2
< Date: 2020/4/7
< Time: 20:00:00
---
> Date: 2020/4/6
> Time: 21:00:00
Ce sera. Ici, supposons que vous souhaitiez ignorer la différence de date et ne prendre la différence que dans l'heure.
$ diff -I Date file1.txt file2.txt
1,2c1,2
< Date: 2020/4/7
< Time: 20:00:00
---
> Date: 2020/4/6
> Time: 21:00:00
Mais le résultat n'est pas différent. Essayez maintenant d'insérer une ligne vide entre la date et l'heure dans file1.txt et file2.txt.
file1.txt
Date: 2020/4/7
Time: 20:00:00
file2.txt
Date: 2020/4/6
Time: 21:00:00
De même, si vous prenez diff
$ diff -I Date file1.txt file2.txt
3c3
< Time: 20:00:00
---
> Time: 21:00:00
Je n'ai pu récupérer que le temps correctement.
C'est parce que --ignore-matching-lines
correspond à un morceau, pas à des lignes.
Un morceau est un morceau de différence, dans le premier exemple
1,2c1,2
< Date: 2020/4/7
< Time: 20:00:00
---
> Date: 2020/4/6
> Time: 21:00:00
Est un morceau. Si vous prenez diff
normalement avec une ligne vide insérée comme essai
$ diff file1.txt file2.txt
1c1
< Date: 2020/4/7
---
> Date: 2020/4/6
3c3
< Time: 20:00:00
---
> Time: 21:00:00
Et deux mecs. Le comportement correct de --ignore-matching-lines
est d'appliquer une correspondance d'expression régulière à chacun de ces morceaux et d'ignorer le premier morceau.
La documentation GNU décrit le comportement exact, y compris celui-ci.
However, -I only ignores the insertion or deletion of lines that contain the regular expression if every changed line in the hunk—every insertion and every deletion—matches the regular expression. In other words, for each nonignorable change, diff prints the complete set of changes in its vicinity, including the ignorable ones.
Comme il est dit "chaque ligne modifiée dans le morceau" ici, il ne sera pas ignoré à moins que toutes les lignes du morceau correspondent à l'expression régulière. Si vous comprenez jusqu'ici, vous comprendrez que le sens de «tout» écrit dans l'homme et le mot «seulement» dans la traduction japonaise se réfèrent à tous les mecs, mais il est assez difficile de le remarquer à première vue. n'est-ce pas….