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?

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top