为什么正则表达式 '.+' 不能按预期工作?

xml*_*lmx 3 grep regular-expression

[root@localhost opt]# cat cfg
key = value
[root@localhost opt]# grep 'key\s*=\s*.+' cfg
[root@localhost opt]# 
Run Code Online (Sandbox Code Playgroud)

我的意图是:=符号后面可以跟零个或多个空格,但后面必须跟一个或多个非空格字符。

为什么不输出行key = value

Joh*_*024 10

观察:

$ grep 'key\s*=\s*.+' cfg
$ grep 'key\s*=\s*.\+' cfg
key = value
$ grep -E 'key\s*=\s*.+' cfg
key = value
Run Code Online (Sandbox Code Playgroud)

在基本正则表达式(BRE,默认值)中,+表示加号。作为 GNU 扩展,可以使用\+. 这也是真实的?{|,和(。除非用反斜杠转义,否则这些在 BRE 下都被视为普通字符。

如果您使用扩展正则表达式,则规则会发生变化-E。对于 ERE,不需要反斜杠,普通+表示一个或多个前一个字符。在 ERE 下,\+表示一个普通的正常加号。