grepを使用して、テキストの異なる行に3つの単語の間のテキストを表示します。

grepを使用して、テキストの異なる行に3つの単語の間のテキストを表示します。

1つのファイルのテキストから3単語の間のテキストを表示したいと思います。

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方法:

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

出力:

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

*?- 貪欲ではない修飾語

おすすめ記事