0

我想用一个新术语替换所有以主题标签开头的术语

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

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

如何更正我的语法?

4

2 回答 2

1

在我的 sed 版本上,+没有做任何有用的事情。你应该*改用。

于 2013-03-10T05:52:54.053 回答
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常规的sed.


@user784637 我用[[:alnum:]]而不是[a-zA-Z0-9]. 例如,这也将匹配带有变音符号的字母。

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

对比

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

您可以使用适合您需求的任何一种..

于 2013-03-10T07:06:06.503 回答