Regex [0-9]*和[0-9]&x2B之间的差异;在sed中

Regex [0-9]*和[0-9]&x2B之间的差异;在sed中,regex,sed,Regex,Sed,据我所知,*匹配零个或多个,+匹配一个或多个。 所以当我在macOS上这样做时: echo "1" | sed 's/[0-9]*//g' 号码被删除了 但如果我这样做: echo "1" | sed 's/[0-9]+//g' 号码仍然会在那里 但是[0-9]+不应该也匹配“1”吗?+在sed中被认为是扩展正则表达式的一部分,因此默认情况下,+不会被识别为特殊字符。使用-E标志启用扩展正则表达式,如下所示: echo "1" | sed -E 's/[0-9]+//g' 这(可能)

据我所知,*匹配零个或多个,+匹配一个或多个。 所以当我在macOS上这样做时:

echo "1" |  sed 's/[0-9]*//g'
号码被删除了

但如果我这样做:

echo "1" |  sed 's/[0-9]+//g'
号码仍然会在那里


但是[0-9]+不应该也匹配“1”吗?

+
在sed中被认为是扩展正则表达式的一部分,因此默认情况下,
+
不会被识别为特殊字符。使用
-E
标志启用扩展正则表达式,如下所示:

echo "1" |  sed -E 's/[0-9]+//g'
这(可能)与
sed
命令是否在POSIX(严格)模式下运行有关,或者是否启用了GNU扩展

在POSIX模式下,
sed
regex中的
+
不是元字符

在GNU扩展模式中,
+
表示“一次或多次重复”。使用
-E
选项启用GNU扩展

有关sed正则表达式的更多信息:


可能的重复不是GNU和非GNU(MacOS有BSD sed),而是BRE(基本正则表达式和ERE(扩展正则表达式)。POSIX规范中描述了这两种情况。选项-E将表达式解释为ERE。