为什么 sed 的 + 正则表达式运算符不匹配任何前导空格,但 * 匹配?

Why is sed's + regex operator not matching any leading whitespace, but * is?

我以为+和*都是贪心的。为什么在这种情况下 + 似乎不匹配,但 * 匹配?

$ cat test
     a
$ sed -i 's/^[ \t]+//g' test
$ cat test
     a
$ sed -i 's/^[ \t]*//g' test
$ cat test
a

这些只是 a 之前的空格(不是制表符),但单独使用制表符或两者混合产生的结果相同。

这是在 sed (GNU sed) 4.2.2.

+ 在基本正则表达式中无法识别,这是 sed 的默认设置。使用 + 匹配文字 + 字符。

使用 -E 选项强制 sed 识别 ERE(扩展正则表达式)。

您需要使用反斜杠转义“+”\+

sed -i 's/^[ \t]\+//g' test