從命令列命名捕獲組

從命令列命名捕獲組

我想出了以下正規表示式:

\[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

相關內容