【发布时间】:2021-01-16 15:38:22
【问题描述】:
我尝试了以下方法:
# echo "12MB" | sed -e 's/[bm]\*//i'
12MB
# echo "12MB" | sed -e 's/[bm]\+//i'
12
我希望两者都能产生相同的输出(贪婪匹配),但带有星号的输出却没有。我也尝试过使用 gsed,但结果相同。
当我尝试使用-E # for extended re 时,这两种形式都不起作用。
ubuntu docker 容器的行为也相同。
谁能帮我理解这是为什么?
【问题讨论】:
-
@kisch 下面的答案解释了很多并且非常有帮助,但是我仍然很困惑为什么转义的加号与转义的星号不同(它适用于转义的加号) )。
-
sed 基本的正则表达式语法有点混乱。转义的加号是正则表达式重复运算符,意思是“匹配一次或多次”。在这种情况下,模式匹配字符串中的“M”,并且重复一次延伸到“B”。转义的星号是文字星号,因此该模式在您的字符串中根本无法匹配。