2013-03-10 27 views

回答

1

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你笑ULD可能使用,因爲-E-r目前無證)

,他們還提供\+作爲擴展到BRE

sed 's/#[[:alnum:]]\+/replacement/g' 

如果您需要的便攜性,你應該定期sedBRE堅持。


@ user784637我用[[:alnum:]]代替[a-zA-Z0-9]。例如,這也可以將字母與變音符號相匹配。

$ printf "%s\n" ë è é | grep '[a-zA-Z0-9]' 
$ 

$ printf "%s\n" ë è é | grep '[[:alnum:]]' 
ë 
è 
é 
$ 

你可以使用任何適合您的需求..

+0

打開弔艙門,HAL – user784637 2013-03-10 07:25:04

+0

我很抱歉戴夫,我恐怕我不能那樣做.. – Scrutinizer 2013-03-10 07:36:21

1

在我的sed版本上,+沒有任何用處。您應該改用*

+0

該訣竅。在'egrep -E'上,加號操作重複上一個術語1次或更多次,而星號重複上一個術語0次或更多次。 – user784637 2013-03-10 05:54:25