繁体   English   中英

MacOS Catalina 上的 sed/gsed 与 star 不按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM