Regex stimmt nicht überein

Regex stimmt nicht überein

warum passt das nicht..?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile

Das..:

--Updated Date: 2013-11-06 15:32:13

d?liegt daran, dass ich manchmal habe Update Dateund manchmal Updated Date.

zum Entfernen? Ich habe es \sauch mit versucht, hat nicht funktioniert.

Antwort1

Sie müssen den -rParameter verwenden. Versuchen Sie es mit

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

Antwort aktualisieren

Wenn Sie verwenden sed '/something/d', wird jede Zeile, die damit übereinstimmt, gelöscht.

-r - Der Parameter -r dient zur Verwendung erweiterter regulärer Ausdrücke.

Der Ausdruck enthält zwei reguläre Ausdrücke.

[[:space:]]- Übereinstimmung mit allen Leerzeichen, einschließlich Zeilenumbrüchen

? - optional

+- ein- oder mehrmals.

Der Befehl sed löscht also alle Zeilen, die mit --updated übereinstimmen, und dann ein oder mehrere Leerzeichen und dann das Datum, aber wegen des ? ist das Zeichen d optional. So etwa:

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13

Antwort2

Um dies mithilfe grundlegender POSIX-Regex zu tun, ist das Folgende das Beste, was mir einfällt:

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

Leider gibt es keinen echten Ersatz für ?, daher wird ein verwendet, das auch auf mehrere s *zutrifft . Das kann jedoch ersetzt werden, indem man das Muster einfach wiederholt und bei der zweiten Wiederholung ein a verwendet.d+*

Aktualisieren

Um den gleichen Effekt wie die erweiterten Ausdrücke zu erzielen, müssen Sie eigentlich zwei Muster verwenden:

sed \'
  /--Updated[[:space:]][[:space:]]*Date/d
  /--Update[[:space:]][[:space:]]*Date/d
  ' inputfile

Antwort3

Fügen Sie mit gnu sed 4.2.2 auf Cygwin das -rFlag hinzu:

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

druckt keine Ausgabe. -raktiviert erweiterte reguläre Ausdrücke ?und +funktioniert wie erwartet. DieReferenz für erweiterte reguläre AusdrückeIch verwende die meisten Punkte ?und +muss in grundlegenden regulären Ausdrücken einen vorangestellten Backslash haben (Standard), um ihre spezielle Bedeutung zu erhalten.

verwandte Informationen