Question

diff a une -I regexp option qui ne tient pas compte des modifications qui vient d'insérer ou de lignes de suppression qui correspondent à l'expression régulière donnée. J'ai besoin d'un analogue de cela pour le cas, lorsque des changements sont entre deux lignes (plutôt que d'insérer ou de lignes de suppression).

Par exemple, je veux ignorer toutes les différences comme entre "abXd" et "abYd", pour donné X et Y.

Il semble diff n'a pas ce genre de capacité. Est-il une alternative appropriée pour diff?

Était-ce utile?

La solution

Vous pouvez filtrer les deux fichiers par sed pour éliminer les lignes que vous ne se soucient pas. Le schéma général est /regex1/,/regex2/ d à quoi que ce soit entre les lignes de suppression correspondant à deux expressions rationnelles. Par exemple:

diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)

Autres conseils

Amélioration de la solution plus tôt par John Kugelman:

diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)

est probablement ce que vous cherchez peut-être! Cette version normalise le changement spécifique sur chaque ligne sans supprimer la ligne elle-même. Cela permet de montrer diff une autre différences qui restent sur la ligne.

En supposant X et Y sont des caractères uniques, puis -I 'ab[XY]d' fonctionne très bien pour moi.

Vous pouvez utiliser sed pour remplacer les instances du modèle avec une chaîne standard:

diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top