Sed-Zeilen nach dem Match und vor dem nächsten Match

Sed-Zeilen nach dem Match und vor dem nächsten Match

Wie erhält man alle Zeilen nach einem passenden Wort bis zum nächsten unterschiedlichen passenden Wort?

Meine Eingabe sieht beispielsweise wie folgt aus.

1
2
3

5
6

und ich muss sedvon1Zu5und in meiner Ausgabe muss ich einschließen1aber ich möchte *5* und die restlichen Zeilen nicht einschließen.

Wenn meine Datei keine5, ich muss die restlichen Zeilen bis zum Ende durchgehen lassen.

NOTIZ:Ich habe den referenzierten Link gesehen, der wie ein Duplikat meiner Frage aussieht und den Titel hat:Nur Text zwischen 2 übereinstimmenden Mustern anzeigenaber es beantwortet meine Frage nicht. Die Antworten dort enthielten keine Möglichkeit, damit umzugehen, wenn das zweite Match nicht in der Datei ist.

Antwort1

sed '/1/,/5/!d;/5/d'

Gibt die Zeilen ab einer Zeile zurück, die enthält, 1bis zur nächsten Zeile danach, die enthält 5(diese nicht eingeschlossen). Wenn 5nach der Zeile, die enthält, keine Zeile folgt, die enthält, wird von der ersten Zeile, die enthält , bis zum Ende der Datei 1gedruckt .1

Beachten Sie, dass alle entsprechenden Abschnitte gedruckt werden.

Wenn es nur einen Abschnitt gibt oder Sie nur am ersten interessiert sind, könnte ein anderer Ansatz sein:

sed -n '/1/,$!d; /5/q; p'

Das bedeutet, seddass das Lesen beendet wird, nachdem in derselben Zeile oder nach der ersten Zeile, die enthält, eine 5 gefunden wurde 1.

verwandte Informationen