Wie kann ich sed nach dem ersten übereinstimmenden Adressbereich beenden?
Habe ich eine Datei:
header
trigger
text1
text2
trigger
text5
trigger
...
trigger
...
Ich will sed nur eine übereinstimmung zwischen den ersten beiden vorkommen von 'trigger'. So habe ich versucht:
sed -n '/trigger/,/trigger/p'
Aber als der man-Seite für die sed sagt, dass passt alle vorkommen innerhalb von zwei Zeilen mit 'trigger'. Ich will sed zu beenden, nach dem ersten match, also die Ausgabe wäre:
trigger
text1
text2
trigger
Wie kann ich dies erreichen?
InformationsquelleAutor der Frage PonyEars | 2014-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies mit einer Schleife in GNU
sed
:Erklärung:
/trigger/
starten Sie einen block von Befehlenp
-- print die Zeile:loop
-- set ein label namensloop
n
-- die nächste Zeilep
-- print die Zeile/trigger/q
-- wenn die Linie entspricht/trigger/
beendensed
loop
InformationsquelleAutor der Antwort janos
Während jason ist tot und ist das, was Sie suchen, würde ich lieber mit
awk
für diese AufgabeAusgabe:
Dies würde mehr Flexibilität zu wählen, Linien zwischen
n
th undm
das auftreten vontrigger
.E. g.
InformationsquelleAutor der Antwort jkshah
Anderen
awk
variation:InformationsquelleAutor der Antwort Jotne