[英]sed/gsed on MacOS Catalina not working as expected with star
我尝试了以下方法:
# echo "12MB" | sed -e 's/[bm]\*//i'
12MB
# echo "12MB" | sed -e 's/[bm]\+//i'
12
我期望两者产生相同的输出(贪婪匹配),但带有星号的却没有。 我也尝试过 gsed,但结果相同。 当我尝试使用-E # for extended re
,这两种形式都不起作用。 一个 ubuntu docker 容器也有同样的行为。
有人可以帮我理解为什么会这样吗?
首先,在 sed 的“基本”正则表达式模式中*
用于重复, \\*
是文字星号。 所以你的例子是
# echo "12MB" | sed -e 's/[bm]*//i'
12MB
...这仍然不会产生您预期的输出。
当您使用可见替换时,原因就很明显了:
# echo "12MB" | sed -e 's/[bm]*/!!!/i'
!!!12MB
模式在字符串的开头匹配,重复计数为零。 一场比赛后,更换停止。
所以你真的想要一次或多次重复,就像在你的工作示例中一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.