![Obtenha todas as correspondências de regex entre dois padrões e imprima-as em um arquivo](https://rvso.com/image/50567/Obtenha%20todas%20as%20correspond%C3%AAncias%20de%20regex%20entre%20dois%20padr%C3%B5es%20e%20imprima-as%20em%20um%20arquivo.png)
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 -P
sinalizador (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|$)'