grepで一意の結果のみを検索します。

grepで一意の結果のみを検索します。

このコマンドを使用して、ファイル内の複数の単語を検索します。

grep -iE "(foo|bar|test|something)" filename.txt

これはうまくいきますが、見つかった単語のすべての項目を見つけます。たとえば、foo8回見つかった場合、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

これは、一致させる正規表現を変数に入れることによって行われますaa単語に分割され、配列に配置されますb。の各正規表現は各行bに対してテストされ、各行の最初の一致のみが印刷されます。

おすすめ記事