Ich habe die Antwort von Phoshi mit Hilfe von Dennis Williamson verwendet, um mir dabei zu helfen, herauszufinden, sed /^\s+-\s.*/d
was wie erwartet funktioniert.
Verwenden von sed zum Entfernen von Zeilen in einer Datei
Ich habe eine Datei, die ungefähr so aussieht:
Heading - - Completed foo - More information - Still more * Need to complete bar - Did baz (comment blah blah) *** Another - * Need to complete foo - Completed bar (blah comment blah) *** - Done baz
Ich muss die Textdatei durchlaufen sed
, um alle Zeilen zu entfernen, die mit Leerzeichen (die Anzahl variiert) und einem Bindestrich und einem anderen Leerzeichen beginnen.
Was ist der Regex oder das Muster, das ich verwenden muss sed
, damit die Ausgabe wie folgt aussieht?
Heading - * Need to complete bar Another - * Need to complete foo
4 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
"s/\s*-\s.*//g"
sollte es tun, denke ich.
Dies entspricht einem Leerzeichen, * einem Nullpunkt oder mehr des vorangehenden Zeichens (dem Leerzeichen), einem wörtlichen Bindestrich, einem weiteren Leerzeichen und dann. +, Um alles danach zu finden.
Sie sollten egrep oder grep für diese Aufgabe verwenden. Sed ist ein Stream-Editor. Grep entspricht eher der Philosophie der einzelnen Linien.
Sie benötigen einen regulären Ausdruck, der dem Zeilenanfang, Leerzeichen, Bindestrich und Leerzeichen entspricht. Das hört sich so an:
egrep -v '^[ ]+-[ ]' filename
Die -v
Option bewirkt, dass egrep die übereinstimmenden Zeilen ENTFERNT. Dies ist einfacher als das Erstellen eines regulären Ausdrucks, der die Zeilen zurückweist.
Beispiel:
nobody$ egrep -v '^[ ]+-[ ]' /tmp/foof Heading - * Need to complete bar Another - * Need to complete foo nobody$ cat /tmp/foof Heading - - Completed foo - More information - Still more * Need to complete bar - Did baz (comment blah blah) *** Another - * Need to complete foo - Completed bar (blah comment blah) *** - Done baz nobody$ _
Der Umgang mit Tab-Zeichen bedeutet nur, dass Sie sie in den Klammerausdrücken benötigen, aber das lässt sich online nur schwer anzeigen.
Für das Filtern ganzer Zeilen aus der Ausgabe möchten Sie normalerweise grep
nicht sed
. Um bestimmte Zeilen auszuschließen, sollten Sie diese verwenden grep -v 'exclusion-regex'
.
Verwandte Probleme
-
14
Regex-Tool für Linux
-
3
Kann nicht herausfinden, warum diese Regex nicht zutrifft
-
3
Wie kann ich mit Python / AWK / SED ein Inhaltsverzeichnis für ein Markdown-Dokument erstellen?
-
2
Entfernen von Zeilenumbrüchen aus einer RTF-Datei mit sed
-
5
Grep-Tool für XML
-
4
Wozu benutzt man ? in grep befehl .. und praktischen einsatz
-
13
Analysieren von Textdateien
-
1
Gibt es ein Gegenteil von: g in vim?
-
4
Header / Kommentarblöcke abrufen
-
1
Ersetzen Sie Dateiname durch Dateipfad durch Sed