我想出了以下正则表达式:
\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)
这个想法是解析提交消息的几个参数:
[release minor]
Hello world
- asd
- zxc
匹配的结果应该是release_type = 'minor'
,release_notes = 'Hello world\n…
。
由于 macOS 中的正则表达式引擎较旧,因此我尝试使用 perl。
我试过了:
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