我使用正则表达式来处理字符串“abc123”。下面的命令是工作和返回值“c123”
echo abc123 | grep -o [a-z][0-9]*$
Run Code Online (Sandbox Code Playgroud)
但是下面的命令不起作用。
echo abc123 | grep -o [a-z][0-9]+$
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个结果?
我知道 '*' 用于匹配前面的模式元素零次或多次,而 '+' 用于匹配前面的模式元素至少一次或多次。
所以这种情况让我很困惑。
+
只是扩展正则表达式 (ERE) 中的量词:
$ echo abc123 | grep -Eo '[a-z][0-9]+$'
c123
Run Code Online (Sandbox Code Playgroud)
在基本的正则表达式(BRE),它匹配的文字+
,虽然可以使用\{1,\}
,而不是,或GNU的grep(-o
已经是一个GNU扩展反正)\+
:
$ echo abc123 | grep -o '[a-z][0-9]\+$'
c123
Run Code Online (Sandbox Code Playgroud)
(注意引号以防止[
和\
被 shell 解释)。