
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 Date
und manchmal Updated Date
.
zum Entfernen? Ich habe es \s
auch mit versucht, hat nicht funktioniert.
Antwort1
Sie müssen den -r
Parameter 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 -r
Flag hinzu:
'--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'
druckt keine Ausgabe. -r
aktiviert 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.