Grupos de captura con nombre desde la línea de comando

Grupos de captura con nombre desde la línea de comando

Se me ocurrió la siguiente expresión regular:

\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)

La idea es analizar un mensaje de confirmación para varios parámetros:

[release minor]

Hello world

- asd
- zxc

La coincidencia debería resultar release_type = 'minor', release_notes = 'Hello world\n….

Estoy intentando usar Perl debido a los antiguos motores de expresiones regulares en macOS.

He intentado:

perl -e 'print "$+{release_notes}" while /\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)/gs;' msg.txt

Pero por alguna razón, esta expresión no funciona como se esperaba.

De hecho, incluso el más simple

perl -ne 'print "$+{release_notes}" while /\n(?<release_notes>.*)/gs;' msg.txt 

falla.

Este

perl -ne 'print "$+{release_notes}" while /(?<release_notes>.*)/gs;' msg.txt 

tiene éxito y simplemente devuelve toda la entrada.

Probablemente me estoy perdiendo algo simple aquí, pero no estoy seguro de qué es.

Respuesta1

esta respuestaDame una solución: agregar -0777al comando soluciona el problema.

Citar:

Todavía lo necesita incluso cuando el-0777desarma elseparador de registros de entrada, por lo que el archivo se lee de inmediato; ver https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183

información relacionada