据我了解,*匹配零个或多个,而+匹配一个或多个。 因此,当我在macOS上执行此操作时:
echo "1" | sed 's/[0-9]*//g'
该号码已删除。
但是,如果我这样做:
echo "1" | sed 's/[0-9]+//g'
该号码仍然存在。
但是[0-9] +也不应匹配“ 1”吗?
答案 0 :(得分:1)
+
被视为扩展正则表达式的一部分,因此,默认情况下,+
不被识别为特殊字符。使用-E
标志启用扩展正则表达式,如下所示:
echo "1" | sed -E 's/[0-9]+//g'
答案 1 :(得分:1)
这(大概)是关于sed
命令是否以POSIX(严格)模式运行或是否启用了GNU扩展。
在POSIX模式下,+
正则表达式中的sed
不是元字符。
在GNU扩展模式下,+
表示“一个或多个重复”。使用-E
选项启用了GNU扩展。
有关sed正则表达式的更多信息: