sed中[0-9] *和[0-9] +之间的差异

时间:2019-09-21 02:34:49

标签: regex sed

据我了解,*匹配零个或多个,而+匹配一个或多个。 因此,当我在macOS上执行此操作时:

echo "1" |  sed 's/[0-9]*//g'

该号码已删除。

但是,如果我这样做:

echo "1" |  sed 's/[0-9]+//g'

该号码仍然存在。

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

2 个答案:

答案 0 :(得分:1)

sed中的

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

echo "1" |  sed -E 's/[0-9]+//g'

答案 1 :(得分:1)

这(大概)是关于sed命令是否以POSIX(严格)模式运行或是否启用了GNU扩展。

在POSIX模式下,+正则表达式中的sed不是元字符。

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

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