Zeigen Sie mit grep Text zwischen 3 Wörtern in verschiedenen Textzeilen an

Zeigen Sie mit grep Text zwischen 3 Wörtern in verschiedenen Textzeilen an

Ich möchte Text zwischen 3 Wörtern aus einem Text in einer Datei anzeigen:

lalala
<ticket>
BASH is awesome
BASH is awesome1
</ticket>
lalalala
<ticket>
BASH is awesome2
BASH is awesome3
texttext
</ticket>
lololo
<ticket>
awesome
BASH is awesome4
BASH is awesome5
</ticket>
lalalla

Ich versuche folgendes:

grep -Pzo '(?s)<ticket>.*\n.*awesome3.*\n.*</ticket>' file.txt

Ergebnis:

<ticket>
BASH is awesome
BASH is awesome1
</ticket>
lalalala
<ticket>
BASH is awesome2
BASH is awesome3
texttext
</ticket>
lololo
<ticket>
awesome
BASH is awesome4
BASH is awesome5
</ticket>

Erwartet:

<ticket>
BASH is awesome2
BASH is awesome3
texttext
</ticket>

Antwort1

Verwenden Sie die folgendengrepAnsatz:

grep -Pzo '(?s)<ticket>[^<>]*?awesome3.*?</ticket>' file.txt

Die Ausgabe:

<ticket>
BASH is awesome2
BASH is awesome3
texttext
</ticket>

*?- nicht gieriger Modifikator

verwandte Informationen