我想用一个新术语替换所有以主题标签开头的术语
我正在使用 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:]]'
ë
è
é
$
您可以使用适合您需求的任何一种..