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 -0777
al comando soluciona el problema.
Citar:
Todavía lo necesita incluso cuando el
-0777
desarma 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