我有一台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。我建议后者,因为到处的反斜杠很快就会变得丑陋。