Mostra texto entre 3 palavras em linhas diferentes do texto com grep

0

Eu quero mostrar texto entre 3 palavras do texto em 1 arquivo:

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

Eu tento isso:

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

Resultado:

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

Espera:

<ticket>
BASH is awesome2
BASH is awesome3
texttext
</ticket>
    
por PGrill 13.04.2017 / 11:20

1 resposta

1

Use a seguinte abordagem grep :

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

A saída:

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

*? - modificador não-ganancioso

    
por 13.04.2017 / 11:44

Tags