Como filtrar conteúdo entre palavras-chave específicas usando o grep?

1

Eu tenho vários arquivos e quero descobrir o conteúdo entre duas tags st e et .
se eu usar grep "st.*et" files , eu vou ter essas duas tags envolvidas no resultado.
Como st Hello world! et .
Mas eu só preciso da parte Hello world! .

Existe uma maneira de mostrar apenas o conteúdo entre as tags usando o grep (ou outras ferramentas de regex)?

PS: Eu sei como usar ferramentas como AWK , python para fazer mais processamento com esses resultados para alcançar meu objetivo. Mas eu apenas me pergunto se poderia haver uma maneira mais direta de fazer isso.

    
por Zen 12.06.2015 / 05:13

2 respostas

5

Usando o GNU grep construído com suporte a PCRE recente:

echo 'st Hello world! et' | grep -oP "st\K.*?(?=et)"

A chave aqui é usar as asserções look-ahead e look-behind-zero-length.

\K     ==>  Look-behind assertion
(?=et) ==>  Look-ahead assertion

Para mais informações, você pode ler aqui .

    
por 12.06.2015 / 07:45
4

Você pode querer usar sed :

sed -n 's/.*st\(.*\)et.*//p'
    
por 12.06.2015 / 07:12