Tri*_*tos 1 grep regular-expression
根据grep手册:
* The preceding item will be matched zero or more times.
+ The preceding item will be matched one or more times.
Run Code Online (Sandbox Code Playgroud)
让我们测试一下
echo 'agb' | grep 'a.*b' # returns agb
echo 'agb' | grep 'a.+b' # returns nothing
Run Code Online (Sandbox Code Playgroud)
为什么+三个gs不匹配?据我所知 3 大于 1。
我们认为的大部分“正则表达式”实际上在 POSIX 中称为扩展正则表达式(或 ERE)。但是您的grep
呼叫似乎处于基本正则表达式模式(或简称 BRE)。BRE 和 ERE 有许多不同之处。这些差异之一是您必须转义元字符:+
是文字加号,除非您用反斜杠转义它。您的grep
命令似乎处于 BRE 模式,因此请尝试使用\+
而不是普通的+
.
如果您对 BRE 与 ERE 的要求非常严格,那么 BRE 实际上并不支持+
and?
操作,尽管您可以分别使用\{1,\}
and\{0,1\}
构造来模拟它们。严格的 BRE 也不支持|
运算符,我不确定您如何在 BRE 中模拟它。然而,与 ERE 不同的是,BRE 支持反向引用(这看起来很像它们在 Perl 中所做的,只是您必须转义括号)。
一些grep
实现(像GNU)支持?
,+
以及|
运营商在BRE模式,但你必须逃脱他们像任何其他特殊字符:\?
,\+
,和\|
。但是grep
我知道没有任何实现支持 ERE 模式下的反向引用。
要强制您grep
使用 ERE 模式,您可以使用-E
选项 to grep
,或者您可以egrep
改为调用它。