はじめに
grepコマンドは、LinuxやMacのターミナル操作で欠かせない検索コマンドです。
特に複数の条件を組み合わせることで、ログ解析や設定確認を効率化できます。
本記事では、grepコマンドで複数条件を扱うための基本から実践的な使い方までをわかりやすく解説します。
参考:GNU grep
grepコマンドで複数条件を基本構文で指定する方法
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
apple grape
banana lemon
orange melon
apple banana orange
EOF
実行コマンド
grep 'apple.*banana\|banana.*apple' input.txt
実行結果
apple orange banana
apple banana orange
実行コマンド
grep 'apple' input.txt | grep 'orange'
実行結果
apple orange banana
apple banana orange
仕組み
| 方法 | コマンド例 | 仕組み |
|---|---|---|
| OR条件 | grep 'apple.*banana|banana.*apple' input.txt | |で複数条件を指定し、appleの後にbanana、またはbananaの後にappleがある行を抽出 |
| AND条件 | grep 'apple' input.txt | grep 'orange' | パイプでgrepを連結し、appleを含みさらにorangeを含む行を抽出 |
解説
grepコマンドでは、\|を使うことでOR条件を指定できます。
AND条件はパイプでgrepを連結するとシンプルに実現できます。
grepコマンドで複数条件を1行で記述する方法
ファイル作成
cat << 'EOF' > input.txt
apple red
apple green
banana yellow
grape purple
apple yellow
banana green
EOF
実行コマンド
grep -E 'apple|yellow' input.txt
実行結果
apple red
apple green
banana yellow
apple yellow
実行コマンド
grep 'apple' input.txt | grep 'yellow'
実行結果
apple yellow
仕組み
| 方法 | コマンド | 内容 |
|---|---|---|
| OR条件 | grep -E 'apple|yellow' input.txt | apple または yellow を含む行を検索 |
| AND条件 | grep 'apple' input.txt | grep 'yellow' | apple と yellow の両方を含む行を検索 |
| 拡張正規表現 | -E | 複数条件を正規表現で扱えるようにする |
解説
grep は -E を使うことで複数条件を1行で簡潔に記述できます。
AND条件はパイプで grep を連結すると実現できます。
grepコマンドで複数条件のOR検索を行う方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
apple pie
banana split
EOF
実行コマンド
grep -E 'apple|banana' input.txt
実行結果
apple
banana
apple pie
banana split
実行コマンド
grep -e 'apple' -e 'banana' input.txt
実行結果
apple
banana
apple pie
banana split
仕組み
| 方法 | 内容 |
|---|---|
| grep -E 'apple|banana' | -Eで拡張正規表現を有効にし、|でOR条件を指定 |
| grep -e 'apple' -e 'banana' | -eを複数指定してOR検索を実現 |
解説
grepでは複数条件をOR検索することで、複数キーワードを一度に検索できます。
-Eと-eのどちらもよく使われるため、用途に応じて使い分けます。
grepコマンドで複数条件のAND検索を行う方法
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
apple grape
orange lemon
apple orange
banana lemon
EOF
実行コマンド
grep "apple" input.txt | grep "orange"
実行結果
apple orange banana
apple orange
仕組み
| 仕組み | 内容 |
|---|---|
| 1つ目のgrep | grep "apple" で apple を含む行を抽出 |
| パイプ| | 1つ目のgrepの結果を次のgrepへ渡す |
| 2つ目のgrep | grep "orange" でさらに orange を含む行を抽出 |
| AND検索 | 両方の条件に一致した行のみ表示される |
解説
grep はパイプを組み合わせることで複数条件のAND検索を実現できます。
複数キーワードを段階的に絞り込めるため、ログ解析やテキスト検索で便利です。
grepコマンドで複数条件のNOT検索を行う方法
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
apple grape melon
banana lemon peach
orange melon kiwi
grape peach apple
EOF
実行コマンド
grep -vE 'apple|banana' input.txt
実行結果
orange melon kiwi
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキスト検索を行うコマンド |
| -v | 条件に一致しない行を表示(NOT検索) |
| -E | 拡張正規表現を使用 |
| apple|banana | apple または banana を含む行を条件指定 |
| 処理内容 | apple と banana を含む行を除外して表示 |
解説
grep -vE を使うことで、複数条件のNOT検索を簡潔に実現できます。
| を利用したOR条件と -v の組み合わせがポイントです。
grepコマンドで複数条件を-eオプションで複数指定する方法
ファイル作成
cat << 'EOF' > input.txt
apple orange banana
grape apple lemon
banana melon peach
orange kiwi apple
EOF
実行コマンド
grep -e "apple" -e "banana" input.txt
実行結果
apple orange banana
grape apple lemon
banana melon peach
orange kiwi apple
実行コマンド
grep -e "orange" -e "grape" input.txt
実行結果
apple orange banana
grape apple lemon
orange kiwi apple
仕組み
| 項目 | 内容 |
|---|---|
| grep | ファイル内から文字列を検索するコマンド |
| -e | 検索条件を指定するオプション |
| 複数指定 | -e を複数書くことで OR 条件検索になる |
| 対象ファイル | input.txt の内容を検索 |
解説
grep -e を複数使うことで、複数条件をまとめて検索できます。
OR条件で文字列検索したい場合によく利用される方法です。
grepコマンドで複数条件を-Eオプションで拡張正規表現検索する方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
apple pie
banana split
grape
EOF
実行コマンド
grep -E 'apple|banana' input.txt
実行結果
apple
banana
apple pie
banana split
実行コマンド
grep -E '^apple|split$' input.txt
実行結果
apple
apple pie
banana split
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキスト検索を行うコマンド |
| -E | 拡張正規表現を有効化 |
| apple|banana | apple または banana に一致 |
| ^apple | apple で始まる行を検索 |
| split$ | split で終わる行を検索 |
解説
grep -E を使うことで、OR条件をシンプルに記述できます。
複数条件検索では | や ^ $ を組み合わせると柔軟な抽出が可能です。
grepコマンドで複数条件を正規表現パターンで柔軟に検索する方法
ファイル作成
cat << 'EOF' > input.txt
ERROR: database connection failed
INFO: user login success
WARNING: disk space low
ERROR: timeout occurred
DEBUG: cache refreshed
INFO: backup completed
WARNING: memory usage high
EOF
実行コマンド
grep -E 'ERROR|WARNING' input.txt
実行結果
ERROR: database connection failed
WARNING: disk space low
ERROR: timeout occurred
WARNING: memory usage high
実行コマンド
grep -E 'ERROR.*timeout|INFO.*backup' input.txt
実行結果
ERROR: timeout occurred
INFO: backup completed
実行コマンド
grep -E '^(ERROR|INFO)' input.txt
実行結果
ERROR: database connection failed
INFO: user login success
ERROR: timeout occurred
INFO: backup completed
仕組み
| 項目 | 内容 |
|---|---|
| grep -E | 拡張正規表現を利用する |
| | | OR条件を指定する |
| .* | 任意の文字列を表現する |
| ^ | 行頭一致を表現する |
| ( ) | 条件をグループ化する |
解説
grep -E を使うことで、複数条件を柔軟に組み合わせた検索が可能です。
ログ解析や特定パターン抽出で非常に便利な方法です。
grepコマンドで複数条件をパイプと組み合わせて絞り込む方法
ファイル作成
cat << 'EOF' > input.txt
ERROR user01 login failed
INFO user02 login success
ERROR user03 timeout
WARN user01 disk usage high
ERROR user02 login failed
INFO user03 logout
EOF
実行コマンド
grep "ERROR" input.txt | grep "failed"
実行結果
ERROR user01 login failed
ERROR user02 login failed
実行コマンド
grep "ERROR" input.txt | grep "user02"
実行結果
ERROR user02 login failed
実行コマンド
grep -E "ERROR|WARN" input.txt | grep "user01"
実行結果
ERROR user01 login failed
WARN user01 disk usage high
仕組み
| コマンド | 仕組み |
|---|---|
| grep "ERROR" input.txt | grep "failed" | 1回目のgrepでERROR行を抽出し、2回目でfailedを含む行だけに絞り込む |
| grep "ERROR" input.txt | grep "user02" | ERRORを含む行からさらにuser02を含む行を抽出する |
| grep -E "ERROR|WARN" input.txt | grep "user01" | -EでOR条件を使い、ERRORまたはWARNを取得後、user01を含む行に限定する |
解説
grepコマンドはパイプ(|)を組み合わせることで、複数条件を段階的に絞り込めます。
ログ解析やエラー調査で非常によく使われる実践的な方法です。
grepコマンドで複数条件を-fオプションで一括管理する方法
ファイル作成
cat << 'EOF' > input.txt
ERROR: database connection failed
INFO: user login success
WARNING: disk usage high
ERROR: timeout occurred
INFO: batch process completed
WARNING: memory usage high
EOF
ファイル作成
cat << 'EOF' > patterns.txt
ERROR
WARNING
EOF
実行コマンド
grep -f patterns.txt input.txt
実行結果
ERROR: database connection failed
WARNING: disk usage high
ERROR: timeout occurred
WARNING: memory usage high
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキスト検索を行うコマンド |
| -f patterns.txt | 検索条件をファイルから一括読み込み |
| patterns.txt | 複数の検索キーワードを1行ずつ記載 |
| input.txt | 検索対象のファイル |
解説
grep -f を利用すると、複数条件を別ファイルで管理できるため、条件追加やメンテナンスが容易になります。
大量の検索パターンを扱う場合にも可読性が高く、実務でよく利用される方法です。
grepコマンドで複数条件検索時に完全一致検索する方法
ファイル作成
cat << 'EOF' > input.txt
apple
apple pie
banana
grape
pineapple
apple
EOF
実行コマンド
grep -E '^apple$|^banana$' input.txt
実行結果
apple
banana
apple
実行コマンド
grep -wE 'apple|banana' input.txt
実行結果
apple
apple pie
banana
apple
仕組み
| 方法 | コマンド | 仕組み |
|---|---|---|
| 完全一致検索 | grep -E '^apple$|^banana$' input.txt | ^は行頭、$は行末を表し、appleまたはbananaと完全一致する行のみを検索します。 |
| 単語一致検索 | grep -wE 'apple|banana' input.txt | -wオプションにより単語単位で一致判定を行い、apple pieのような行も検索対象になります。 |
解説
grepで複数条件を完全一致検索する場合は、^と$を使う方法が最も確実です。
単語単位で十分な場合は、-wオプションを使うことで簡潔に記述できます。
grepコマンドで複数条件検索時に一致件数をカウントする方法
ファイル作成
cat << 'EOF' > input.txt
error: database connection failed
info: user login success
warning: disk usage high
error: timeout occurred
info: backup completed
warning: memory usage high
error: invalid request
EOF
実行コマンド
grep -E 'error|warning' input.txt
実行結果
error: database connection failed
warning: disk usage high
error: timeout occurred
warning: memory usage high
error: invalid request
実行コマンド
grep -E 'error|warning' input.txt | wc -l
実行結果
5
仕組み
| コマンド | 仕組み |
|---|---|
| grep -E 'error|warning' input.txt | errorまたはwarningを含む行を検索 |
| wc -l | grepの検索結果行数をカウントして一致件数を表示 |
解説
grep -Eを使うことで複数条件を簡潔に記述できます。
wc -lと組み合わせると一致件数を効率よく確認できます。
grepコマンドで複数条件検索時に複数ファイルを対象にする方法
ファイル作成
cat << 'EOF' > file1.txt
error: connection failed
info: retry started
warning: timeout detected
error: disk full
EOF
ファイル作成
cat << 'EOF' > file2.txt
info: process started
warning: memory usage high
error: permission denied
success: completed
EOF
実行コマンド
grep -E 'error|warning' file1.txt file2.txt
実行結果
file1.txt:error: connection failed
file1.txt:warning: timeout detected
file1.txt:error: disk full
file2.txt:warning: memory usage high
file2.txt:error: permission denied
実行コマンド
grep -e 'error' -e 'warning' file1.txt file2.txt
実行結果
file1.txt:error: connection failed
file1.txt:warning: timeout detected
file1.txt:error: disk full
file2.txt:warning: memory usage high
file2.txt:error: permission denied
仕組み
| 項目 | 内容 |
|---|---|
| -E | 拡張正規表現を利用して error|warning のような複数条件を指定 |
| -e | 検索条件を複数定義できるオプション |
| file1.txt file2.txt | 複数ファイルを同時に検索対象に指定 |
| 出力形式 | ファイル名:一致した行 の形式で表示 |
解説
grep は複数ファイルを同時に検索でき、条件も柔軟に追加できます。
-E と -e を使い分けることで、複数条件検索を効率的に実行できます。
grepコマンドで複数条件検索を再帰的に実行する方法
ファイル作成
cat << 'EOF' > input.txt
server=web01 status=active region=tokyo
server=web02 status=inactive region=osaka
server=db01 status=active region=tokyo
server=app01 status=active region=nagoya
server=db02 status=inactive region=tokyo
EOF
実行コマンド
grep -rE 'active.*tokyo|tokyo.*active' .
実行結果
./input.txt:server=web01 status=active region=tokyo
./input.txt:server=db01 status=active region=tokyo
./input.txt:server=db02 status=inactive region=tokyo
実行コマンド
grep -r 'active' . | grep 'tokyo'
実行結果
./input.txt:server=web01 status=active region=tokyo
./input.txt:server=db01 status=active region=tokyo
./input.txt:server=db02 status=inactive region=tokyo
仕組み
| 項目 | 内容 |
|---|---|
| grep -r | ディレクトリ配下を再帰的に検索 |
| -E | 拡張正規表現を利用 |
| active.*tokyo | activeの後にtokyoを含む行を検索 |
| tokyo.*active | tokyoの後にactiveを含む行を検索 |
| grep 'active' | grep 'tokyo' | パイプで複数条件をAND検索 |
解説
grep -r を使うことでサブディレクトリも含めて検索できます。
複数条件は正規表現またはパイプを使うことで柔軟に指定可能です。
grepコマンドで複数条件検索時によくあるミスと注意点
ファイル作成
cat << 'EOF' > input.txt
ERROR: disk full
INFO: service started
WARNING: high memory usage
ERROR: permission denied
INFO: backup completed
WARNING: cpu temperature high
EOF
実行コマンド
grep -E 'ERROR|WARNING' input.txt
実行結果
ERROR: disk full
WARNING: high memory usage
ERROR: permission denied
WARNING: cpu temperature high
実行コマンド
grep 'ERROR|WARNING' input.txt
実行結果
(結果なし)
実行コマンド
grep -e 'ERROR' -e 'WARNING' input.txt
実行結果
ERROR: disk full
WARNING: high memory usage
ERROR: permission denied
WARNING: cpu temperature high
仕組み
| コマンド | 仕組み | よくあるミス | 注意点 |
|---|---|---|---|
| grep -E 'ERROR|WARNING' | -Eで拡張正規表現を有効化し、OR検索を実施 | -Eを付け忘れる | |
| grep 'ERROR|WARNING' | 通常正規表現として処理 | OR検索になると思い込む | |
| grep -e 'ERROR' -e 'WARNING' | 条件を複数指定して検索 | -eを省略して複数条件を書こうとする | 可読性が高く安全に複数条件を書ける |
解説
grepで複数条件検索をする場合、-Eの付け忘れが非常に多いです。
安全に書きたい場合は-eを複数使う方法も実務ではよく利用されます。
grepコマンドで複数条件検索を業務で活用する具体例
ファイル作成
cat << 'EOF' > input.txt
2026-05-01 INFO User login success
2026-05-01 ERROR Database connection failed
2026-05-02 WARN Disk usage 85%
2026-05-02 ERROR Timeout occurred
2026-05-03 INFO Backup completed
2026-05-03 ERROR Memory leak detected
EOF
実行コマンド
grep -E 'ERROR|WARN' input.txt
実行結果
2026-05-01 ERROR Database connection failed
2026-05-02 WARN Disk usage 85%
2026-05-02 ERROR Timeout occurred
2026-05-03 ERROR Memory leak detected
実行コマンド
grep 'ERROR' input.txt | grep 'Timeout'
実行結果
2026-05-02 ERROR Timeout occurred
実行コマンド
grep -e 'ERROR' -e 'INFO' input.txt
実行結果
2026-05-01 INFO User login success
2026-05-01 ERROR Database connection failed
2026-05-02 ERROR Timeout occurred
2026-05-03 INFO Backup completed
2026-05-03 ERROR Memory leak detected
仕組み
| コマンド | 仕組み | 用途 |
|---|---|---|
| grep -E 'ERROR|WARN' | 拡張正規表現でOR条件検索 | 複数種類のログ抽出 |
| grep 'ERROR' | grep 'Timeout' | パイプでAND条件検索 | 特定エラーの絞り込み |
| grep -e 'ERROR' -e 'INFO' | -eで複数条件指定 | 条件追加がしやすい検索 |
解説
grepの複数条件検索は、障害解析やログ監視で頻繁に利用されます。
OR検索・AND検索を使い分けることで、必要な情報を効率よく抽出できます。
grepの複数条件検索を理解して効率的に活用するポイント
grepで複数条件を扱えるようになると、単純な文字列検索だけでなく、必要な情報だけを素早く抽出できるようになります。
OR検索やAND検索、NOT検索を使い分けることで、検索精度を高められます。
基本構文を一つずつ確認しながら試すことが重要です。
grepコマンドの複数条件検索を習得することで、日々の業務効率を大きく向上できます。

