Показать текст между 3 словами на разных строках из текста с помощью grep

Показать текст между 3 словами на разных строках из текста с помощью grep

Я хочу показать текст между 3 словами из текста в 1 файле:

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

Я пробую это:

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

Результат:

<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>

Надеется:

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

решение1

Используйте следующеегрэпподход:

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

Выход:

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

*?- нежадный модификатор

Связанный контент