Ich habe zwei Dateien, die ich mit diff vergleichen möchte. Die Dateien werden automatisch generiert und enthalten eine Reihe von Zeilen, die folgendermaßen aussehen:
//! Generierungsdatum : Mo, 14, Dez 2009
Ich möchte diese Unterschiede ignorieren und habe versucht, die "-I REGEX" Flagge zu verwenden, um das zu erreichen.
Die Anzahl der Leerzeichen zwischen "Datum" und dem Doppelpunkt variiert jedoch und leider scheint es, dass diff keinen Großteil der grundlegenden Regex-Utilities verwendet, die dafür nötig wären.
Ich kann zum Beispiel nicht dazu bringen, dass das "ein oder mehr" Pluszeichen funktioniert. Das Gleiche gilt für die "\s" Repräsentation von Leerzeichen.
diff -I '.*Generierungsdatum\s+:.*' ....
und
diff -I '.*Generierungsdatum +:.*' ....
scheitern beide spektakulär.
Anstatt weiter blindlings Dinge auszuprobieren, kann mir jemand eine gute Referenz zu dem diff-spezifischen Subset von regulären Ausdrücken zeigen?
Danke!
\===== BEARBEITEN =======
Dank FalseVinylShrub habe ich festgestellt, dass ich mein '+' und ähnliche Zeichen escapen sollte. Das behebt das Problem teilweise. Diff findet erfolgreich Übereinstimmungen für
.*Generierungsdatum \+.*
und
.*Generierungsdatum *.*
(Beachten Sie, dass zwischen "Datum" und "*" zwei Leerzeichen stehen.)
Aber sobald ich versuche, den ':' zu dieser Ausdruck hinzuzufügen, wie folgt:
.*Generierungsdatum \+:.*
und
.*Generierungsdatum \+\:.*
Beide Versionen schaffen es nicht, den betreffenden String zu finden, und führen dazu, dass diff deutlich länger läuft. Irgendwelche Gedanken dazu?
0 Stimmen
Re Ihr ':' -Problem: Ich habe keine Ahnung, warum, aber versuchen Sie es (a) mit [:] zu sehen, ob das irgendwelche speziellen Effekte umgeht, obwohl der Backslash es nicht tat, oder (b) nutzen Sie ., um alles an dieser Position abzugleichen, wenn Sie sich keine Sorgen über falsche Positive machen ... nur ein Schuss ins Blaue ...