为什么grep找不到整数* 2?

时间:2016-06-15 17:09:44

标签: linux grep

例如

grep -n 'integer*2' *.f

什么都没有。但是

grep -n '*2' *.f


main.f:57:      integer*2 itime(nxmax)
main.f:605:             dxy=((xsource(is)-xobs)**2+(ysource(is)-yobs)**2)**.5
main.f:622:           chisum=chisum+diff2/uobs**2
model.f:15:      integer*2 veli(nxmax)
model.f:52:      size2=size**2
time.f:151:      integer*2 itime(nxmax)

我真的不明白这一点。

3 个答案:

答案 0 :(得分:5)

*是一个运算符,意思是"匹配前一个词0次或更多次"。所以integer*2匹配

intege2
integer2
integerr2
integerrr2
     :

没有一个出现在你的程序中。 RE的开头*没有意义(之前没有任期),因此被忽略或视为*的匹配。转义*以使其与实际的明星匹配:

'integer\*2'

答案 1 :(得分:3)

你的grep正在使用正则表达式。 (Star的解释方式与您可能认为的不同)。试试

grep -F -n 'integer*2' *.f

答案 2 :(得分:2)

因为grep将搜索参数解释为正则表达式,其中*表示“前面的零个或多个”。因此'integer*2intege2以及integerrrrr2匹配,因为*适用于前一个r,但与文字integer*2不匹配。

使用反斜杠将其解析为将其解释为文字*,您应该获得所需的匹配项:

grep -n 'integer\*2' *.f