このコマンドを使用して、ファイル内の複数の単語を検索します。
grep -iE "(foo|bar|test|something)" filename.txt
これはうまくいきますが、見つかった単語のすべての項目を見つけます。たとえば、foo
8回見つかった場合、8つの結果がすべて表示されます。
一意の結果のみを表示できますか?たぶん最初のものを見せることもできます。
ベストアンサー1
最初の一致のみを表示するオプションがあります。観察する:
$ grep -iE "(foo|bar|test|something)" filename.txt
Foo 1
Bar 2
foo 3
Foo 4
最初の一致に制限するには、次を追加します-m1
。
$ grep -iEm1 "(foo|bar|test|something)" filename.txt
Foo 1
1つの制限は、最初foo
と最初のbar
ものではなく、最初の一致のみを表示することです。
複数の一致のうち最初の項目を印刷します。
次のテストファイルを検討してください。
$ cat filename.txt
Foo 1
Bar 2
foo 3
Foo 4
test 5
test 6
表示される 3 つの正規表現のそれぞれの最初の項目を印刷するには、次のようにします。
$ awk -v a='[fF]oo [bB]ar [tT]est' 'BEGIN{split(a,b," ")} {for (i in b) if ($0~b[i] && !c[i]) {print; c[i]++}}' filename.txt
Foo 1
Bar 2
test 5
これは、一致させる正規表現を変数に入れることによって行われますa
。 a
単語に分割され、配列に配置されますb
。の各正規表現は各行b
に対してテストされ、各行の最初の一致のみが印刷されます。