如何用sed中的新术语替换正则表达式?

时间:2013-03-10 05:28:36

标签: regex sed

我想用以新术语

替换所有以标签开头的术语

我正在使用sed,但似乎存在语法错误

sed 's/#[a-zA-Z0-9]+/replacement/g' terms

如何更正语法?

2 个答案:

答案 0 :(得分:1)

在我的sed版本上,+没有做任何有用的事情。您应该使用*代替。

答案 1 :(得分: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,您应该使用-r,因为-E目前尚未记录在内

他们还提供\+作为BRE的扩展名,

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

如果您需要便携性,则应坚持常规BRE的{​​{1}}。


@ user784637我使用sed代替[[:alnum:]]。例如,这也会使字母与变音符号相匹配。

[a-zA-Z0-9]

VS

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

你可以使用任何一种适合你需要的东西..