为什么这个简单的正则表达式不起作用

时间:2014-11-15 13:38:20

标签: regex bash sed scripting

我正在刷我的正则表达式,看看我能做什么,并缩小我的标准编码风格。然后我写了一个应该工作的小片段,但不会。所以我一直把它缩减到最基本的形式,但仍然没有做到我希望它做:

echo "a" | sed -e 's/a+/A/g'

为什么不输出

A

我很困惑,为什么这不起作用......

2 个答案:

答案 0 :(得分:1)

您不需要+。如果您想用大写a替换每个小写的A,您可以使用此代码:

echo "abcdabdbda" | sed 's/a/A/g'

输出:

AbcdAbdbdA

+是正则表达式中的特殊字符。它至少一次或多次匹配前面的字符或组。你在这里不需要它。

注意:如果您在标准sed正则表达式模式中使用+,则需要将其转义:\+以赋予它特殊含义。如果没有逃避,它将像文字+一样受到威胁。

答案 1 :(得分:1)

如果您希望它使用此语法,您需要确保sed将正则表达式解释为扩展正则表达式。

为此,您可以在Mac OSX上使用-E

echo "a" | sed -E -e 's/a+/A/g'

或linux上的-r标志:

echo "a" | sed -r -e 's/a+/A/g'