我正在刷我的正则表达式,看看我能做什么,并缩小我的标准编码风格。然后我写了一个应该工作的小片段,但不会。所以我一直把它缩减到最基本的形式,但仍然没有做到我希望它做:
echo "a" | sed -e 's/a+/A/g'
为什么不输出
A
我很困惑,为什么这不起作用......
答案 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'