为什么正则表达式 '[az][0-9]+$' 不起作用

0 regular-expression

我使用正则表达式来处理字符串“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)

为什么我得到这个结果?

我知道 '*' 用于匹配前面的模式元素零次或多次,而 '+' 用于匹配前面的模式元素至少一次或多次。

所以这种情况让我很困惑。

ste*_*ver 5

+只是扩展正则表达式 (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 解释)。