为什么 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
我以为+和*都是贪心的。为什么在这种情况下 + 似乎不匹配,但 * 匹配?
$ 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