2016-06-15 2 views
2

なぜgrepは整数* 2を見つけられないのですか?例えば

grep -n 'integer*2' *.f 

ショーnothing.But

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) 

私は本当にこのことを理解していません。

答えて

5

*は演算子で、「前の項を0回以上一致させる」という意味です。したがってinteger*2と一致する

intege2 
integer2 
integerr2 
integerrr2 
    : 

あなたのプログラムには表示されていません。 *REのは意味がありません(前の用語はありません)、無視されるか、*の一致として扱われます。それは実際の星を一致させる持っている*をエスケープ:あなたはgrepは正規表現を使用している

'integer\*2' 
3

。 (スターは、あなたが信じるのとは違った解釈をしています)。 grep*は「直前のゼロ個以上」を意味するものではされている正規表現などの検索引数を、解釈されているので

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

を試してみてください。従って'integer*2は、に*が適用されますが、integer*2と一致しないため、intege2integerrrrr2と一致します。

はリテラル *としてそれを解釈するバックスラッシュでエスケープ

、あなたが希望の試合を取得する必要があります:

grep -n 'integer\*2' *.f 
関連する問題