El patrón de expresión regular sed coincidía con codicioso aunque no debería

El patrón de expresión regular sed coincidía con codicioso aunque no debería

Me topé con un comportamiento que no puedo explicar, espero que algunos de ustedes puedan ayudarme.

Intento generar una especie de documentación a partir de un Antproyecto más grande, como tal, la uso sedpara filtrar la información de los archivos que necesito en la documentación más adelante.

Tengo un archivo de compilación ant normal con líneas como esta:

    <target name="targetA" depends="targetD" description="some fancy description">
...
    <target name="targetB" depends="targetD" description="some fancy description">
...
    <target name="targetC" depends="targetD" description="some fancy description">

Ahora sigo esta línea sed:

sed -nr 's/.*?target name="(.*?)".*="(.*?)".*/ * \1 - \2/p'

Debería darme:

 * targetA - some fancy description
 * targetB - some fancy description
 * targetC - some fancy description

En lugar de eso obtengo:

 * targetA" depends="targetD" - some fancy description
 * targetA" depends="targetD" - some fancy description
 * targetA" depends="targetD" - some fancy description

Intenté omitir la salida del segundo grupo para verificar que es el primer grupo el que realmente coincide con toda la parte "depende", aunque configuré la expresión regular para que no sea codiciosa hasta la siguiente comilla doble.

¿Que me estoy perdiendo aqui?

Usar una expresión regular más explícita como esta funciona como se esperaba, pero todavía no entiendo lo codicioso:

sed -nr 's/.*?target name="(.*?)".*=.*="(.*?)".*/ * \1 - \2/p'

Como esto podría ser de interés, estoy usando sed-4.2.2-4ubuntu1 en ubuntu linux (instalación predeterminada)

Respuesta1

Sed no admite coincidencias no codiciosas como se ve en ".*?" expresión.

Prueba esto:

sed -nr 's/.*target name="([^"]*)" .*="(.*)".*/ * \1 - \2/p' file

Producción:

* targetA - alguna descripción elegante
 * targetB - alguna descripción elegante
 * targetC - alguna descripción elegante

información relacionada