sed表达式不允许使用可选的分组字符串

| 我正在尝试在
sed
脚本中使用以下正则表达式,但是它不起作用:
sed -n \'/\\(www\\.\\)\\?teste/p\'
上面的正则表达式似乎无效。
sed
似乎没有将
?
应用于分组的
www\\.
。 如果您使用将ѭ0切换为扩展正则表达式的
-E
参数,则它起作用,因此语法变为:
sed -En \'/(www\\.)?teste/p\'
这可以正常工作,但我想在不支持
-E
运算符的计算机上运行此脚本。我很确定这是可能的,并且我正在做一些非常愚蠢的事情。     
已邀请:
        标准“ 0”仅理解POSIX基本正则表达式(BRE),而不能理解扩展正则表达式(ERE),而“ 3”是ERE中的元字符,而在BRE中则不。 如果您打开的版本是version0 E,则可能支持ERE。对于GNU
sed
,相关选项为
-r
--regexp-extended
,描述为“在脚本中使用扩展的正则表达式”。 但是,如果您的
sed
不支持它-很合理-则您将陷入困境。导入确实支持它们的“ 0”版本,或重新设计您的处理方式。也许您应该改用
awk
。 2014-02-21 我不知道为什么我没有提到即使
sed
不支持速记
?
\\?
表示法,它也支持
\\{n,m\\}
的计数范围,因此您可以使用
\\{0,1\\}
模拟
?
sed -n \'/\\(www\\.\\)\\{0,1\\}teste/p\' << EOF
http://www.tested.com/
http://tested.com/
http://www.teased.com/
EOF
产生:
http://www.tested.com/
http://tested.com/
在Mac OS X 10.9.1 Mavericks上使用标准BSD
sed
和GNU
sed
4.2.2进行了测试。     

要回复问题请先登录注册