2012-05-31 6 views
8

grep -f関数を使用して、特定のパターンに一致するファイルから行を抽出しています。私のパターンファイルがpattern.txtであるとしましょう。 >について 'grep -f':ファイルとパターンを一致させる

- 私はpattern.txt file.txtなど-fのgrepを行う際
1 
2 
3 
4 
5 

そしてそれに対して、私はこのパターンがfile.txtで一致していたファイル

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
6::ere 
7::rer 
8::3rr 
9::gty 

は今、私はこれを取得しています

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
8::3rr 

上記の出力の最後の行が私の問題を引き起こしています。このgrepコマンドを変更して、出力を得る(正しい対応を示す)にはどうすればいいですか?

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
+0

私はgrep "' more patt.txt' "file.txtを試しました。 awk -F '::' '{print $ 1 "" $ 2} "しかしこれも私に同じ問題をもたらします。 – ana

答えて

12

grepがあなたのパターンとラインの開始と一致するように、あなたのパターンの前に^を追加します。あなたのパターンが実際に数値に設定されている場合は、パターンのリストは必要ありません。ちょうど^[1-5]:を使用してください。

+0

ありがとうございます。それはそれをしました。 – ana

+4

数字がそれほど大きくならば、^ 1は10 :,などと一致することに気をつけてください。 –

6

まあ、可能な解決策はたくさんあります。 grepには3を含むすべての行が見つかり、 '8 :: 3rr'行には実際には3が含まれているので、探しているものをより具体的にする必要があります。

たとえば、パターンを '1:'、 '2:'などに変更して、数字の後にコロンを付けることができます。または、行の先頭にある番号だけを一致させるためにそれらを '^ 1'、 '^ 2'などに変更できます。それはあなたのデータに依存しますが、おそらく両方が必要なので、 '1:'の検索は'21: 'と一致せず、'^5 'の検索は'53:'と一致しません。あなたのパターンファイルはこのようになります:

^1: 
^2: 
^3: 
^4: 
^5: 
関連する問題