Eu criei a seguinte expressão regular:
\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)
A ideia é analisar uma mensagem de commit para vários parâmetros:
[release minor]
Hello world
- asd
- zxc
A correspondência deve resultar em release_type = 'minor'
, release_notes = 'Hello world\n…
.
Estou tentando usar Perl devido a mecanismos regex antigos no macOS.
Eu tentei:
perl -e 'print "$+{release_notes}" while /\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)/gs;' msg.txt
Mas por alguma razão, esta expressão não funciona como esperado.
Na verdade, mesmo o mais simples
perl -ne 'print "$+{release_notes}" while /\n(?<release_notes>.*)/gs;' msg.txt
falha.
Esse
perl -ne 'print "$+{release_notes}" while /(?<release_notes>.*)/gs;' msg.txt
é bem-sucedido e apenas retorna toda a entrada.
Provavelmente estou sentindo falta de algo simples aqui, mas não tenho certeza do que é.
Responder1
Esta respostame dê uma solução: adicionar -0777
ao comando resolve o problema.
Citar:
Ainda precisa disso, mesmo quando o
-0777
desativa oseparador de registro de entrada, então o arquivo é lido de uma só vez; ver https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183