我想出了以下正規表示式:
\[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