Grupos de captura nomeados na linha de comando

Grupos de captura nomeados na linha de comando

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 -0777ao comando resolve o problema.

Citar:

Ainda precisa disso, mesmo quando o-0777desativa 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

informação relacionada