正则表达式中的重复不再显示结果

正则表达式中的重复不再显示结果

我有一台Windows-10机器,在上面安装了Ubuntu平台,如下结果所示uname -a

Linux DOMINIQUEDS 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux

我有一些文件包含很多条目,例如:

18bd6344        mfc110u!CPtrArray        Size:[1046]
18bd63f4        mfc110u!CPtrArray        Size:[1046]
18bd64a4        mfc110u!CPtrArray        Size:[1046]
18bdcef4        mfc110u!CPtrArray        Size:[4]
18bdcfa4        mfc110u!CPtrArray        Size:[8]
18bdd054        mfc110u!CPtrArray        Size:[49]
18bdd104        mfc110u!CPtrArray        Size:[498]
18bdd1b4        mfc110u!CPtrArray        Size:[498]

提到的大小从 1 到数百万不等,我对更大的大小感兴趣,比如说包含至少三位数字的大小。

我可以使用以下正则表达式来做到这一点:

grep "Size:\[[0-9][0-9][0-9]" Log1.log // this is working fine

我期望以下正则表达式给出相同的结果:

grep "Size:\[[0-9]{3,}" Log1.log

但我什么也没得到。

我刚刚核实了一下man grep,这个解释包含以下内容:

...
重复
...
{n,} 前面的项匹配 n 次或多次。

那么为什么这不起作用呢?

答案1

由于它是在 Ubuntu 上,我猜你有 GNU grep。这手册页还说:

grep 理解三种不同版本的正则表达式语法:“基本”(BRE)、“扩展”(ERE) 和“perl”(PCRE)。在 GNU grep 中,基本语法和扩展语法之间的可用功能没有区别。在其他实现中,基本正则表达式的功能不太强大。 以下描述适用于扩展正则表达式;随后总结了基本正则表达式的差异。

进而:

基本正则表达式与扩展正则表达式
在基本正则表达式中,元字符?, +, {, |, (, 和 ) 失去了它们的特殊含义;而是使用反斜杠版本\?, \+, \{, \|, \(, 和\)

因此,您需要使用\{3,\}或使用该-E标志来启用 ERE。我建议后者,因为到处的反斜杠很快就会变得丑陋。

相关内容