8

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

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

grep -f pattern.txt file.txt を実行すると、これが表示されます ->

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

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

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

2 に答える 2

12

^パターンの前に追加して、行頭がパターンgrepと一致するようにします。パターンが実際に数字のセットである場合、パターンのリストは必要ありません。を使用するだけ^[1-5]:です。

于 2012-05-31T11:56:59.847 に答える
6

まあ、考えられる解決策はたくさんあります。3 を含むすべての行を検索するように指示grepしていますが、実際には行 '8::3rr' に 3 が含まれているため、探しているものをより具体的にする必要があります。

たとえば、パターンを「1:」、「2:」などに変更して、数字の後にコロンが続くものだけに一致させることができます。または、'^1'、'^2' などに変更して、行頭の数字のみに一致させることもできます。データにもよりますが、'1:' の検索は '21:' と一致せず、'^5' の検索は '53:' と一致しないように、おそらく両方が必要です。その場合、パターン ファイルは次のようになります。

^1:
^2:
^3:
^4:
^5:
于 2012-05-31T12:01:18.560 に答える