Obtenga todas las coincidencias de expresiones regulares entre dos patrones e imprímalas en un archivo

Obtenga todas las coincidencias de expresiones regulares entre dos patrones e imprímalas en un archivo

Tengo un archivo con un montón de colas largas. Me gustaría tomar cada grupo entre dos patrones e imprimirlos en un archivo nuevo, una coincidencia por línea. Podría lograr hacer esto con Python, pero preferiría usar solo herramientas de línea de comandos para esta tarea. Si no hay un patrón final, me gustaría tomar todo hasta el final de la línea.

Algo como:

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

Respuesta1

SI GNU grep es una opción, puede pasar el -Pindicador (regex compatible con Perl) y usar aserciones anticipadas, aserciones retrospectivas y coincidencias no codiciosas para extraer lo que necesita.

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

O como sugiere Stéphane Chazelas, utilice el ingenioso\Ken lugar de la afirmación de mirar hacia atrás

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

información relacionada