初めに #
Linux環境にてログ解析やテキストファイルの内容検索を行う際、grep
コマンドは欠かせないコマンドとなります。
中でも、複数のキーワードを組み合わせて検索したい場合(いわゆるAND検索やOR検索)には、コマンドの構文やオプションの使い分けを正しく理解することが求められます。
本記事では、初心者の方でも理解しやすいように、grepコマンドを使用して複数条件での検索を行う方法を具体的な例とともに解説します。
grepコマンドの基本構文 #
grep
コマンドの基本構文は「オプション
」「検索パターン
」「ファイル名
」のように指定します。
grep [オプション] '検索パターン' ファイル名
例えば「maillog」にて「error」を検索したい場合のコマンドは以下となります。
grep "error" /var/log/maillog
また、grepコマンドはファイルを直接指定するだけでなく、標準出力をパイプで受け取り検索に利用することも可能です。
cat /var/log/maillog | grep "error"
grepでOR検索を行う方法(いずれかのキーワードにマッチ) #
複数のキーワードにていずれかの「検索パターン」を含む行を抽出するには「-E
」オプションを使用し拡張正規表現を有効にします。
次に正規表現を使用し「パイプ(|)」で複数の条件を繋ぎます。
grep -E "検索パターン1|検索パターン2" ファイル名
例えば「maillog」にて「error」や「fail」を含む行を検索したい場合は下記のコマンドとなります。
grep -E "error|fail" /var/log/maillog
また、同様の複数キーワードによる検索は、「-e
」オプションを用いても実現可能です。
grep -e "検索パターン1" -e "検索パターン2" ファイル名
grepでAND検索を行う方法(複数の条件すべてに一致) #
複数のキーワードすべてを含む行を検索する場合、grepをパイプで連結してフィルタリングを重ねるのが一般的となっております。
これにより「検索パターン1」と「検索パターン2」の両方にマッチする行を表示する事ができます。
grep '検索パターン1' ファイル名 | grep '検索パターン2'
例えば、maillog
ファイル内から「error
」というキーワードと、特定の日付の両方を含む行を検索したい場合は、以下のように grep コマンドを組み合わせて使用します。
grep 'error' /var/log/maillog | grep 'Apr 23'
標準出力より検索に利用する場合は以下となります。
cat /var/log/maillog | grep 'error' | grep 'Apr 23'