我在为 创建 RegEx 字符串时遇到了一些问题sed
。
我使用各种在线服务测试了该表达式,并且确实成功了。
但不幸的是,对于 却不是这样sed
。
这是我的测试sed
表达式:
echo "Windows" | sed -e 's/[Ww][Ii][Nn]([Dd][Oo][Ww][Ss])?/MATCH/g;'
而且它应该匹配“Win”或“Windows”(当然还有“WIN”和“windOwS”等等)。但是它却不匹配!(至少与 不匹配sed
)。问题是,我无法使字符串的第二部分成为可选的。在线 RegEx 测试器按预期工作,但我需要它在命令行上工作。
我知道有很多种 RegEx 风格;所以可能我没有匹配到正确的风格。
有人能帮我吗?
答案1
您的表达式将作为扩展的正则表达式工作。使用sed -E
:
echo "Windows Window" | sed -Ee 's/[Ww][Ii][Nn]([Dd][Oo][Ww][Ss])?/MATCH/g'
使用 GNU,如果我转义,和,sed
我就可以获得相同的效果-E
(即当sed
使用基本正则表达式时):(
)
?
echo "Windows Window" | sed -e 's/[Ww][Ii][Nn]\([Dd][Oo][Ww][Ss]\)\?/MATCH/g'