Obtenha todas as correspondências de regex entre dois padrões e imprima-as em um arquivo

Obtenha todas as correspondências de regex entre dois padrões e imprima-as em um arquivo

Eu tenho um arquivo com um monte de linhas longas. Gostaria de pegar cada grupo entre dois padrões e imprimi-los em um novo arquivo, uma correspondência por linha. Eu conseguiria fazer isso com Python, mas prefiro usar apenas ferramentas de linha de comando para esta tarefa. Se não houver um padrão final, gostaria de pegar tudo até o final da linha.

Algo como:

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

Responder1

SE GNU grep for uma opção, você pode passar o -Psinalizador (regex compatível com Perl) e usar asserções lookahead, asserções lookbehind e correspondências não gananciosas para obter o que você precisa

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP '(?<=START).*?(?=xxEND|$)'
relevanttext
even more relevant

Ou, como sugere Stephane Chazelas, use o bacana\Kno lugar da afirmação de olhar para trás

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP 'START\K.*?(?=xxEND|$)' 

informação relacionada