1. 概要

指定されたパターンに一致しないラインをフィルタリングする必要がある場合があります。 このクイックチュートリアルでは、grepコマンドを使用して複数のパターンの一致を元に戻す方法を簡単に確認します。 grep コマンドは、標準のLinuxインストールで使用できるはずです。

2. 引数として渡されたパターンを除外する

grep コマンドは、指定されたパターンの1つの入力テキストと一致します。 まず、テキストファイルを作成しましょう。

$ cat << EOF > /tmp/baeldung-grep
Time for some thrillin' heroics.
You can't take the sky from me.
May have been the losing side. Still not convinced it was the wrong one.
Every problem is an opportunity in disguise.
EOF

実験では、theまたはeveryという単語を含まない行をフィルタリングします。

2.1. 正規表現としてパターンを組み合わせる

いずれかの単語に一致する正規表現を作成し、-vフラグを使用して一致を反転させることができます

$ grep -ivw 'the\|every' /tmp/baeldung-grep
Time for some thrillin' heroics.

ここでは、パターンを単語全体として扱うために、-wフラグを指定したgrepを使用しました。 追記として、 -iフラグは、大文字と小文字を区別しない一致を実行します

ただし、パターンの数が増えると、正規表現が長くなり、判読できなくなる可能性があります。 これを軽減するために、パターンを個別に指定できます。

2.2. 複数のパターンを指定する

-e フラグを使用すると、繰り返し使用して複数のパターンを指定できます。 -vフラグと-eフラグの繰り返しを使用して、さまざまなパターンを除外できます:

$ grep -ivw -e 'the' -e 'every' /tmp/baeldung-grep
Time for some thrillin' heroics.

指定されたパターンを含まない行を正常にフィルタリングしました。

3. ファイルに記載されているパターンを除外する

または、-fフラグを使用してファイルからパターンを読み取り、-vフラグを使用して一致を反転することもできます。 マニュアルから:

-f FILE, --file=FILE
        Obtain patterns from FILE, one per line. If this option is used multiple times or is combined with the -e (--regexp) option, search for all patterns given. The empty file contains zero patterns, and therefore matches nothing.

ファイルを使用してパターンを保持すると、多数のパターンを簡単に管理し、シェル履歴からコマンドを再利用できます。 1つのパターンのみを含むファイルを作成しましょう。

$ echo 'the' > /tmp/baeldung-grep-patterns
$ grep -wiv -f /tmp/baeldung-grep-patterns /tmp/baeldung-grep
Time for some thrillin' heroics.
Every problem is an opportunity in disguise.

パターンを含むファイルに別のエントリを追加して、grepコマンドを再度実行してみましょう。

$ echo 'every' >> /tmp/baeldung-grep-patterns
$ grep -wiv -f /tmp/baeldung-grep-patterns /tmp/baeldung-grep
Time for some thrillin' heroics.

指定されたファイルのどのパターンにも一致しない行を正常にフィルタリングしました。 また、必要に応じて、パターンファイルにエントリを追加し続けることができます。

4. 結論

この短い記事では、さまざまな grep フラグを確認して、指定された複数のパターンの1つに一致する行を除外する方法を確認しました。