我使用正则表达式来处理字符串“ abc123”。下面的命令是工作并返回值“ c123”
echo abc123 | grep -o [a-z][0-9]*$
但是下面的命令不起作用。
echo abc123 | grep -o [a-z][0-9]+$
为什么会得到这个结果?
我知道'*'用于匹配零个或多个时间的前一个模式元素,而'+'用于匹配至少一个或多个时间的前一个模式元素。
所以这种情况让我感到困惑。
+
只是扩展正则表达式(ERE)中的量词:
$ echo abc123 | grep -Eo '[a-z][0-9]+$'
c123
在基本正则表达式(BRE)中,它与literal匹配+
,尽管您可以使用它\{1,\}
来代替它,或者在GNU grep(-o
无论如何已经是GNU扩展名)中,\+
:
$ echo abc123 | grep -o '[a-z][0-9]\+$'
c123
(注意引号,以防止[
和\
来自被shell解释)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句