Именованные группы захвата из командной строки

Именованные группы захвата из командной строки

Я придумал следующее регулярное выражение:

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

Идея состоит в том, чтобы проанализировать сообщение о коммите на предмет нескольких параметров:

[release minor]

Hello world

- asd
- zxc

Сопоставление должно дать результат release_type = 'minor', release_notes = 'Hello world\n….

Я пытаюсь использовать Perl из-за старых движков регулярных выражений в macOS.

Я пробовал:

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

Но по какой-то причине это выражение не работает так, как ожидалось.

На самом деле, даже более простые

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

терпит неудачу.

Этот

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

завершается успешно и просто возвращает все входные данные.

Вероятно, я упускаю что-то простое, но не уверен, что именно.

решение1

Этот ответпредложите мне решение: добавление -0777к команде решает проблему.

Цитировать:

Это все еще необходимо, даже когда-0777сбрасываетразделитель входных записей, поэтому файл читается сразу; см. https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183

Связанный контент