Wie einige Unterschiede in der Diff-Befehl ignorieren?
Frage
diff
hat eine Option -I regexp
, die Änderungen ignoriert, die nur Zeilen einfügen oder löschen, die den angegebenen regulären Ausdruck entsprechen. Ich brauche eine analog dies für den Fall, wenn Änderungen zwischen zwei Zeilen (eher dann einfügen oder löschen).
Zum Beispiel möchte ich alle Unterschiede ignorieren wie zwischen "abXd"
und "abYd"
für gegebenen X
und Y
.
Es scheint diff
nicht diese Art von Fähigkeit hat. Gibt es eine geeignete Alternative für diff
?
Lösung
Sie können die beiden Dateien durch sed
filtern, um die Linien zu beseitigen Sie nicht interessieren. Das allgemeine Muster ist zu löschen etwas zwischen den Zeilen passend zwei reguläre Ausdrücke /regex1/,/regex2/ d
. Zum Beispiel:
diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)
Andere Tipps
Die Verbesserung auf der frühere Lösung von John Kugelman:
diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)
ist wahrscheinlich das, was Sie können suchen! Diese Version normalisiert auf jeder Zeile die spezifische Änderung selbst die Linie, ohne zu löschen. Dies ermöglicht diff alle zeigen andere Unterschiede, die auf der Linie bleiben.
Unter der Annahme, X und Y einzelne Zeichen sind, dann funktioniert -I 'ab[XY]d'
gut für mich.
Sie sed verwenden könnten Instanzen des Musters mit einer Standard-Zeichenfolge zu ersetzen:
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)