例如
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)
我真的不明白这一点。
答案 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*2
与intege2
以及integerrrrr2
匹配,因为*
适用于前一个r
,但与文字integer*2
不匹配。
使用反斜杠将其解析为将其解释为文字*
,您应该获得所需的匹配项:
grep -n 'integer\*2' *.f