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

Sed:Nur das erste Auftreten einer Musterübereinstimmung drucken?

Für diese Frage gibt es hier bereits Antworten :So wählen Sie das erste Vorkommen zwischen zwei Mustern aus, einschließlich dieser

(7 Antworten)
Vor 4 Jahren geschlossen.

Mehrere Fragen ähneln dieser, aber ich habe keine Lösung gefunden, die funktioniert, wenn ich über mehrere Zeilen nach einem Muster suchen möchte. Folgendes

sed -n '/First string/,/Second string/ p' my.file

druckt alle Vorkommen des übereinstimmenden Musters, aber ich möchte nur das erste Vorkommen. Ich verwende GNU sed.

Akzeptierte Antwort:

Verwenden Sie q um explizit zu beenden, wenn das Endmuster erreicht ist.

In GNU sed:

$ cat foo
foo
START
bar
END
blah
START another

$ sed -n '/START/,/END/p; /END/q' foo
START
bar
END

awk würde es vielleicht einfacher machen, das Endmuster nicht zu wiederholen:

$ awk '/START/{p=1} p; /END/{exit}' foo
START
bar
END

Linux
  1. Rsync-Filter:Nur ein Muster kopieren?

  2. Mehrzeiliger Musterabgleich mit Sed, Awk oder Grep?

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

  4. Vorherige Zeile nach einer Musterübereinstimmung mit Sed drucken?

  5. Nur die erste Zeile aus jeder Folge aufeinanderfolgender Zeilen beibehalten, die einem Muster entsprechen?

Muster ersetzen, nachdem N-te Übereinstimmung in jeder Zeile gefunden wurde??

Nur den Teil einer Linie nach einem übereinstimmenden Muster zurückgeben?

Alle Dateien bis zum Match anzeigen?

Erstes Zeichen einer Zeichenfolge mit Sed umbrechen?

Drucken Sie eine Datei, wobei Sie die ersten X-Zeilen in Bash überspringen

Verwenden von sed zum Ersetzen zwischen einem bestimmten Muster