在POSIX shell腳本中,我需要查找所有出現在{{
和}}
內的文本,並用星號替換文本和周圍的大括號。如何在開始分隔符和結束分隔符之間進行匹配,使得文本不包含結束分隔符(即非貪婪匹配)?
例如,如果輸入的是
{{ abc }} def {{ ghi {jkl} mno }} pqr
那麼輸出必須
* def * pqr
我一直沒能拿出這個是工作的sed
命令。
我嘗試了幾個命令,但他們不工作。例如,以下命令不會產生所需的輸出,因爲sed
會進行貪婪匹配。它最終匹配{{ abc }} def {{ ghi {jkl} mno }}
作爲第一場比賽,而不僅僅是{{ abc }}
。
$ echo "{{ abc }} def {{ ghi {jkl} mno }} pqr" | sed 's/{{.*}}/*/g'
* pqr
下面是另一個不起作用的例子,因爲它最終只匹配得太少。它與{{ ghi {jkl} mno }}
(我們想要匹配)不匹配,因爲這部分字符串包含}
。
$ echo "{{ abc }} def {{ ghi {jkl} mno }} pqr" | sed 's/{{[^}]*}}/*/g'
* def {{ ghi {jkl} mno }} pqr
我該怎麼做這樣的比賽?
我已經通過了Non greedy regex matching in sed?但方案有沒有幫助,因爲在這裏我想匹配{{
和}}
之間的一切,除了兩個連續字符序列特異性,即}}
。如果我試圖在分隔符之間匹配除了單個字符之外的所有內容,那麼對這個問題的答案會有所幫助。