GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zeile entfernen, die bestimmte Zeichenfolge und die folgende Zeile enthält?

Ich benutze das

cat foo.txt | sed '/bar/d'

um Zeilen zu entfernen, die den String bar enthalten in der Datei.

Ich möchte jedoch diese Zeilen und die Zeile direkt danach entfernen . Vorzugsweise in sed , awk oder ein anderes Tool, das in MinGW32 verfügbar ist.

Es ist eine Art Umkehrung dessen, was ich in grep bekommen kann mit -A und -B um übereinstimmende Zeilen sowie Zeilen vor/nach der übereinstimmenden Zeile zu drucken.

Gibt es einen einfachen Weg, dies zu erreichen?

Akzeptierte Antwort:

Wenn Sie GNU sed haben (also nicht eingebettetes Linux oder Cygwin):

sed '/bar/,+1 d'

Wenn Sie bar haben in zwei aufeinanderfolgenden Zeilen wird die zweite Zeile gelöscht, ohne sie zu analysieren. Wenn Sie beispielsweise eine 3-zeilige Datei bar haben /bar /foo , der foo Linie bleibt.


Linux
  1. Der Linux-Sed-Befehl:Verwendung und Beispiele

  2. Bearbeiten von Text auf der Kommandozeile mit sed

  3. Gibt nur die übereinstimmende Zeichenfolge in Sed zurück?

  4. Sed Zeichen aus neuer Zeile entfernen?

  5. Sed:Text nach dem N-ten Zeichen vor/nach einer gegebenen Zeichenfolge einfügen?

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

Wie zeigt man mit dem Linux-Befehl „cat“ nur bestimmte Zeilen nach Nummer an?

Sed On Osx Insert an einer bestimmten Zeile?

Unix Sed Tutorial:Drucken von Dateizeilen mit Adresse und Mustern

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

Linux - grep von bestimmten Zeilen bis zum Ende der Datei