【发布时间】:2019-09-21 12:25:02
【问题描述】:
据我了解,* 匹配零个或多个,+ 匹配一个或多个。 所以当我在 macOS 上这样做时:
echo "1" | sed 's/[0-9]*//g'
号码已被删除。
但如果我这样做:
echo "1" | sed 's/[0-9]+//g'
号码仍然存在。
但是 [0-9]+ 不应该也匹配“1”吗?
【问题讨论】:
据我了解,* 匹配零个或多个,+ 匹配一个或多个。 所以当我在 macOS 上这样做时:
echo "1" | sed 's/[0-9]*//g'
号码已被删除。
但如果我这样做:
echo "1" | sed 's/[0-9]+//g'
号码仍然存在。
但是 [0-9]+ 不应该也匹配“1”吗?
【问题讨论】:
这(可能)是关于 sed 命令是否在 POSIX(严格)模式下运行,或者是否启用了 GNU 扩展。
在 POSIX 模式中,sed 正则表达式中的 + 不是元字符。
在 GNU 扩展模式中,+ 表示“一个或多个重复”。使用 -E 选项启用 GNU 扩展。
有关 sed 正则表达式的更多信息:
【讨论】:
sed 中的+ 被视为扩展正则表达式的一部分,因此默认情况下,+ 不被识别为特殊字符。使用-E 标志来启用扩展正则表达式,如下所示:
echo "1" | sed -E 's/[0-9]+//g'
【讨论】: