[英]How to replace regex pattern with a new term in sed?
我想用一個新術語替換所有以標簽開頭的術語
我正在使用sed但似乎存在語法錯誤
sed 's/#[a-zA-Z0-9]+/replacement/g' terms
我該如何糾正我的語法?
在我的sed版本中, +
沒有做任何有用的事情。 你應該使用*
代替。
sed
支持“基本正則表達式”(BRE),它不提供+
作為特殊運算符。
+
的正確替換將是
sed 's/#[[:alnum:]]\{1,\}/replacement/g'
要么
sed 's/#[[:alnum:]][[:alnum:]]*/replacement/g'
GNU sed
和最近的BSD sed
提供“擴展正則表達式”(ERE)匹配:
sed -E 's/#[[:alnum:]]+/replacement/g'
(雖然使用GNU sed
你應該使用-r
因為-E
目前沒有文檔)
他們還提供\\+
作為BRE
的擴展,
sed 's/#[[:alnum:]]\+/replacement/g'
如果您需要便攜性,您應該堅持使用常規sed
的BRE
。
@ user784637我用[[:alnum:]]
代替[a-zA-Z0-9]
。 例如,這也會使字母與變音符號相匹配。
$ printf "%s\n" ë è é | grep '[a-zA-Z0-9]'
$
與
$ printf "%s\n" ë è é | grep '[[:alnum:]]'
ë
è
é
$
您可以使用任何適合您需求的..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.