我想用以新术语
替换所有以标签开头的术语我正在使用sed,但似乎存在语法错误
sed 's/#[a-zA-Z0-9]+/replacement/g' terms
如何更正语法?
答案 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]'
$
你可以使用任何一种适合你需要的东西..