Я придумал следующее регулярное выражение:
\[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