我想用一个新术语替换所有以主题标签开头的术语
我正在使用 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'
如果您需要可移植性,您应该坚持使用BRE
常规的sed
.
@user784637 我用[[:alnum:]]
而不是[a-zA-Z0-9]
. 例如,这也将匹配带有变音符号的字母。
$ printf "%s\n" ë è é | grep '[a-zA-Z0-9]'
$
对比
$ printf "%s\n" ë è é | grep '[[:alnum:]]'
ë
è
é
$
您可以使用适合您需求的任何一种..