我试图在sed
脚本中使用以下正则表达式,但它不起作用:
sed -n '/\(www\.\)\?teste/p'
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式似乎不起作用.sed
似乎不适?
用于分组www\.
.
如果您使用-E
切换sed
到使用扩展正则表达式的参数,它可以工作,因此语法变为:
sed -En '/(www\.)?teste/p'
Run Code Online (Sandbox Code Playgroud)
这工作正常但我想在不支持-E
运算符的机器上运行此脚本.我很确定这是可能的,我正在做一些非常愚蠢的事情.
Jon*_*ler 97
标准sed
只能理解POSIX 基本正则表达式(BRE),而不是扩展正则表达式(ERE),它?
是ERE中的元字符,但不是BRE中的元字符.
您的版本sed
可能会支持ERE,如果您打开它们.对于GNU sed
,相关选项是,-r
并--regexp-extended
描述为"在脚本中使用扩展正则表达式".
但是,如果你sed
不支持它 - 相当合理 - 那么你就会陷入困境.导入一个版本sed
确实支持它们,或重新设计您的处理.也许你应该使用awk
.
我不知道为什么我没有提到的是,即使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
Run Code Online (Sandbox Code Playgroud)
产生:
http://www.tested.com/
http://tested.com/
Run Code Online (Sandbox Code Playgroud)
使用标准BSD sed
和GNU sed
4.2.2 在Mac OS X 10.9.1 Mavericks上测试.
归档时间: |
|
查看次数: |
23265 次 |
最近记录: |