はじめに
grepはLinuxやUnix系環境で広く利用される検索コマンドです。
通常は特定の文字列に一致する行を抽出しますが、反転一致を利用すると一致しない行だけを取り出せます。
本記事では、grepの反転一致の基本から応用までをわかりやすく解説します。
参考:GNU grep
grepの反転一致とは?一致しない行を抽出する基本
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
melon
pineapple
EOF
実行コマンド
grep -v "apple" input.txt
実行結果
banana
orange
grape
melon
実行コマンド
grep -vi "apple" input.txt
実行結果
banana
orange
grape
melon
実行コマンド
grep -vE "apple|orange" input.txt
実行結果
banana
grape
melon
仕組み
| オプション | 仕組み | 抽出結果 |
|---|---|---|
| grep -v "apple" | apple に一致しない行のみ表示 | appleを含まない行 |
| grep -vi "apple" | -vで反転一致、-iで大文字小文字を無視 | APPLEやappleを除外 |
| grep -vE "apple|orange" | -Eで拡張正規表現を使用し、複数パターンを反転一致 | appleまたはorange以外の行 |
解説
grep の反転一致は -v オプションで実現できます。
特定の文字列に一致しない行だけを抽出できるため、ログ解析や不要データの除外によく利用されます。
grepの反転一致で利用する-vオプションの仕組み
ファイル作成
cat << 'EOF' > input.txt
apple
orange
banana
grape
apple pie
EOF
実行コマンド
grep -v "apple" input.txt
実行結果
orange
banana
grape
仕組み
| 項目 | 内容 |
|---|---|
| オプション | -v |
| 動作 | 検索パターンに一致した行を除外する |
| 通常のgrep | 一致した行のみ表示 |
| grep -v | 一致しない行のみ表示 |
| 利用例 | 不要なログや特定文字列を除外して表示する |
解説
grep -v は反転一致(invert match)を行うオプションです。
指定したパターンに一致する行を除外し、一致しない行だけを出力するため、ログ解析や不要データの除外によく利用されます。
grepの反転一致で特定の文字列に一致しない行を抽出する方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
banana smoothie
melon
EOF
実行コマンド
grep -v "banana" input.txt
実行結果
apple
orange
grape
melon
実行コマンド
grep -v "apple" input.txt
実行結果
banana
orange
grape
banana smoothie
melon
仕組み
| 項目 | 内容 |
|---|---|
| コマンド | grep -v "文字列" ファイル名 |
| -v オプション | 一致しない行を表示する(反転一致) |
| 一致した行 | 出力対象から除外される |
| 一致しない行 | 出力される |
| 主な用途 | 特定のログや不要なデータを除外して抽出 |
解説
grep -v を使用すると、指定した文字列に一致する行を除外して表示できます。
ログ解析や不要な行を取り除きたい場合によく利用される grep の反転一致オプションです。
grepの反転一致で複数パターンに一致しない行を抽出する方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
melon
apple pie
banana cake
EOF
実行コマンド
grep -Ev 'apple|banana' input.txt
実行結果
orange
grape
melon
仕組み
| オプション/構文 | 役割 |
|---|---|
| grep | テキストを検索するコマンド |
| -E | 拡張正規表現を有効化し、| を使用できるようにする |
| -v | 反転一致(一致しない行を抽出) |
| apple|banana | apple または banana に一致する行を検索するパターン |
| input.txt | 検索対象ファイル |
解説
grep -v を使うと一致した行を除外できます。
-E と | を組み合わせることで、複数パターンのいずれにも一致しない行だけを効率よく抽出できます。
grepの反転一致で正規表現に一致しないデータを検索する方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
error.log
warning.log
data.csv
sample.txt
EOF
実行コマンド
grep -vE '.log$' input.txt
実行結果
apple
banana
data.csv
sample.txt
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキスト検索を行うコマンド |
| -v | 反転一致(正規表現に一致しない行を表示) |
| -E | 拡張正規表現を使用 |
| \.log$ | .logで終わる行に一致 |
| 処理結果 | .logに一致した行を除外して表示 |
解説
grep -v を使用すると、指定した正規表現に一致しないデータのみを抽出できます。
ログファイル名の除外や不要データのフィルタリングでよく利用される方法です。
grepの反転一致で完全一致を除外して検索する方法
ファイル作成
cat << 'EOF' > input.txt
apple
orange
banana
grape
apple pie
EOF
実行コマンド
grep -vx "apple" input.txt
実行結果
orange
banana
grape
apple pie
仕組み
| オプション | 説明 |
|---|---|
| -v | 条件に一致した行を除外する(反転一致) |
| -x | 行全体がパターンと完全一致した場合のみ一致とみなす |
| grep -vx "apple" | apple と完全一致する行だけを除外する |
| apple pie | 完全一致ではないため除外されない |
解説
grep の -v と -x を組み合わせることで、指定文字列との完全一致行のみを除外できます。部分一致は対象外となるため、似た文字列を残したまま検索結果を取得できます。
grepの反転一致で大文字・小文字を区別せず一致判定する方法
ファイル作成
cat << 'EOF' > input.txt
Linux
linux
UNIX
unix
Windows
WINDOWS
MacOS
EOF
実行コマンド
grep -iv "linux" input.txt
実行結果
UNIX
unix
Windows
WINDOWS
MacOS
仕組み
| オプション | 説明 |
|---|---|
| grep | テキスト検索コマンド |
| -i | 大文字・小文字を区別せずに検索する |
| -v | 一致した行を除外し、反転一致を行う |
| "linux" | 検索パターン |
| input.txt | 検索対象ファイル |
解説
grep -iv を使用すると、指定した文字列に大文字・小文字を区別せず一致する行を除外できます。linux、Linux、LINUX などに一致する行をまとめて反転一致の対象にできます。
grepの反転一致でコメント行を除外して一致しないデータを抽出する方法
ファイル作成
cat << 'EOF' > input.txt
# システム設定
server=web01
# 開発環境
env=dev
env=stg
# 本番環境
env=prod
user=admin
EOF
実行コマンド
grep -v '^#' input.txt
実行結果
server=web01
env=dev
env=stg
env=prod
user=admin
実行コマンド
grep -v '^#' input.txt | grep -v 'env=prod'
実行結果
server=web01
env=dev
env=stg
user=admin
仕組み
| コマンド | 役割 |
|---|---|
| grep -v '^#' input.txt | -v による反転一致でコメント行(#で始まる行)を除外する |
| grep -v 'env=prod' | env=prod に一致する行を除外し、一致しないデータのみを抽出する |
| | | パイプで前段の抽出結果を次の grep に渡す |
解説
grep -v は反転一致を行い、指定したパターンに一致しない行だけを表示します。
コメント行を除外した後にさらに条件を追加することで、必要なデータのみを効率よく抽出できます。
grepの反転一致で複数ファイルから一致しない内容を検索する方法
ファイル作成
cat << 'EOF' > file1.txt
apple
orange
banana
grape
EOF
ファイル作成
cat << 'EOF' > file2.txt
melon
apple
peach
banana
EOF
ファイル作成
cat << 'EOF' > file3.txt
kiwi
mango
orange
lemon
EOF
実行コマンド
grep -L "apple" file1.txt file2.txt file3.txt
実行結果
file3.txt
実行コマンド
grep -L -E "apple|banana" file1.txt file2.txt file3.txt
実行結果
file3.txt
実行コマンド
grep -h -v "apple" file1.txt file2.txt file3.txt
実行結果
orange
banana
grape
melon
peach
banana
kiwi
mango
orange
lemon
仕組み
| オプション | 役割 | 説明 |
|---|---|---|
| -v | 反転一致 | 指定したパターンに一致しない行を表示する |
| -L | 非一致ファイル表示 | 指定したパターンを含まないファイル名のみ表示する |
| -E | 拡張正規表現 | apple|banana のような OR 条件を利用できる |
| -h | ファイル名非表示 | 複数ファイル検索時にファイル名を出力しない |
解説
grep の反転一致は -v を使用し、一致しない行を抽出できます。
複数ファイルからパターンを含まないファイルを検索する場合は -L が便利です。
grepの反転一致と再帰検索を組み合わせて一致しないデータを探す方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
melon
EOF
実行コマンド
grep -rv "apple" .
実行結果
./input.txt:banana
./input.txt:orange
./input.txt:grape
./input.txt:melon
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキスト検索を行うコマンド |
| -v | 反転一致(指定した文字列に一致しない行を表示) |
| -r | ディレクトリ配下を再帰的に検索 |
| "apple" | 除外対象の文字列 |
| . | カレントディレクトリ以下を検索対象にする |
解説
grep -v を使うと一致しない行だけを抽出できます。
さらに grep -r を組み合わせることで、ディレクトリ配下の複数ファイルから条件に一致しないデータを効率よく検索できます。
grepの反転一致で除外条件と検索条件を組み合わせて一致精度を高める方法
ファイル作成
cat << 'EOF' > input.txt
ERROR: database connection failed
INFO: service started
ERROR: timeout occurred
DEBUG: cache refreshed
ERROR: disk full
INFO: backup completed
EOF
実行コマンド
grep "ERROR" input.txt
実行結果
ERROR: database connection failed
ERROR: timeout occurred
ERROR: disk full
実行コマンド
grep "ERROR" input.txt | grep -v "timeout"
実行結果
ERROR: database connection failed
ERROR: disk full
実行コマンド
grep "ERROR" input.txt | grep -v "timeout" | grep -v "disk"
実行結果
ERROR: database connection failed
仕組み
| コマンド | 役割 |
|---|---|
| grep "ERROR" | ERRORを含む行のみ抽出 |
| grep -v "timeout" | timeoutを含む行を除外(反転一致) |
| grep -v "disk" | diskを含む行を除外(反転一致) |
| | | 前段の検索結果を次のgrepへ渡す |
| 検索条件 + 除外条件 | 必要な行だけを高精度で抽出できる |
解説
grepの反転一致(-v)を利用すると、検索条件に一致した結果から不要なパターンを除外できます。
検索条件と除外条件を組み合わせることで、目的のログやデータを効率よく絞り込めます。
grepの反転一致でAND条件・OR条件を実現して一致しないデータを絞り込む方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
apple_test
banana_test
orange_test
error_log
debug_log
EOF
実行コマンド
grep -v 'apple' input.txt | grep -v 'test'
実行結果
banana
orange
grape
error_log
debug_log
実行コマンド
grep -Ev 'apple|banana' input.txt
実行結果
orange
grape
orange_test
error_log
debug_log
実行コマンド
grep -v 'apple' input.txt | grep -v 'banana'
実行結果
orange
grape
orange_test
error_log
debug_log
仕組み
| 条件 | コマンド例 | 仕組み |
|---|---|---|
| AND条件 | grep -v 'apple' | grep -v 'test' | appleを除外した結果からさらにtestを除外するため、両方に一致しない行だけが残る |
| OR条件 | grep -Ev 'apple|banana' | 正規表現のORで指定したパターンに一致する行をまとめて除外する |
| OR条件 | grep -v 'apple' | grep -v 'banana' | appleを除外し、その後bananaも除外するため、どちらかに一致する行が除外される |
解説
grep -v は一致した行ではなく「一致しない行」を出力する反転一致オプションです。
複数条件はパイプや拡張正規表現(-E)を組み合わせることで、AND条件・OR条件の絞り込みを実現できます。
grepの反転一致で除外対象を外部ファイルから読み込んで一致判定する方法
ファイル作成
cat << 'EOF' > input.txt
apple
banana
orange
grape
melon
EOF
ファイル作成
cat << 'EOF' > exclude.txt
banana
grape
EOF
実行コマンド
grep -v -f exclude.txt input.txt
実行結果
apple
orange
melon
仕組み
| オプション | 役割 |
|---|---|
| grep | パターン検索を行う |
| -v | 一致した行ではなく、不一致の行を出力する(反転一致) |
| -f exclude.txt | 検索パターンを exclude.txt から読み込む |
| input.txt | 検索対象ファイル |
| 処理結果 | exclude.txt に記載された文字列と一致する行を除外して出力 |
解説
grep -v -f を利用すると、除外対象のパターンを外部ファイルで管理できます。
除外条件が多い場合でもコマンドを変更せずにメンテナンスできるため、運用が容易になります。
grepの反転一致とawkを組み合わせて一致条件を柔軟に除外する方法
ファイル作成
cat << 'EOF' > input.txt
INFO: start
ERROR: database
WARN: timeout
DEBUG: trace
ERROR: network
INFO: end
EOF
実行コマンド
grep -v '^ERROR:' input.txt
実行結果
INFO: start
WARN: timeout
DEBUG: trace
INFO: end
実行コマンド
grep -v '^ERROR:' input.txt | awk '!/DEBUG/'
実行結果
INFO: start
WARN: timeout
INFO: end
実行コマンド
grep -v '^ERROR:' input.txt | awk '!/DEBUG/ && !/WARN/'
実行結果
INFO: start
INFO: end
仕組み
| コマンド要素 | 役割 |
|---|---|
| grep -v '^ERROR:' | ERROR:で始まる行を反転一致で除外 |
| awk '!/DEBUG/' | DEBUGを含む行を除外 |
| awk '!/DEBUG/ && !/WARN/' | DEBUGとWARNの両方を除外 |
| | | 前段の出力を次のコマンドへ渡す |
| !/パターン/ | awkで一致しない行だけを出力 |
解説
grepの反転一致(-v)で大まかに除外し、awkで複数条件や複雑な条件を追加すると柔軟なフィルタリングが可能です。
単純な除外はgrep、細かな条件制御はawkと役割を分けると扱いやすくなります。
grepの反転一致が期待どおりに一致しない場合の原因と対処法
ファイル作成
cat << 'EOF' > input.txt
INFO: started
ERROR: timeout
error: lowercase error
WARNING: retry
ERROR: disk full
EOF
実行コマンド
grep -v "ERROR" input.txt
実行結果
INFO: started
error: lowercase error
WARNING: retry
実行コマンド
grep -vi "ERROR" input.txt
実行結果
INFO: started
WARNING: retry
実行コマンド
grep -Evi "ERROR|WARNING" input.txt
実行結果
INFO: started
仕組み
| コマンド | オプション | 動作 |
|---|---|---|
| grep -v "ERROR" input.txt | -v | ERROR に一致した行を除外し、一致しない行のみを表示する。大文字・小文字は区別されるため error は除外されない。 |
| grep -vi "ERROR" input.txt | -v, -i | ERROR と error を同一視して判定し、それらに一致した行を除外する。 |
| grep -Evi "ERROR|WARNING" input.txt | -E, -v, -i | 拡張正規表現を利用し、ERROR または WARNING に一致する行を除外する。大文字・小文字は区別しない。 |
解説
grep -v は「一致しない行」を表示しますが、パターンの解釈や大文字・小文字の違いによって期待どおりに除外できないことがあります。まずは -i の有無や入力データの実際の内容を確認することが重要です。
grepの反転一致でログ解析
ファイル作成
cat << 'EOF' > input.txt
2025-06-01 INFO Application started
2025-06-01 INFO User login success
2025-06-01 ERROR Database connection failed
2025-06-01 INFO Cache refreshed
2025-06-01 WARN Disk usage 85%
2025-06-01 ERROR Timeout occurred
2025-06-01 INFO Batch process completed
EOF
実行コマンド
grep -v "ERROR" input.txt
実行結果
2025-06-01 INFO Application started
2025-06-01 INFO User login success
2025-06-01 INFO Cache refreshed
2025-06-01 WARN Disk usage 85%
2025-06-01 INFO Batch process completed
実行コマンド
grep -vi "error" input.txt
実行結果
2025-06-01 INFO Application started
2025-06-01 INFO User login success
2025-06-01 INFO Cache refreshed
2025-06-01 WARN Disk usage 85%
2025-06-01 INFO Batch process completed
実行コマンド
grep -vE "ERROR|WARN" input.txt
実行結果
2025-06-01 INFO Application started
2025-06-01 INFO User login success
2025-06-01 INFO Cache refreshed
2025-06-01 INFO Batch process completed
仕組み
| オプション | 仕組み | 用途 |
|---|---|---|
| -v | 指定パターンに一致しない行を表示 | ERROR行を除外 |
| -i | 大文字・小文字を区別しない | error、ERRORの両方を除外 |
| -E | 拡張正規表現を使用 | 複数条件の除外 |
| ERROR|WARN | ERRORまたはWARNに一致 | 複数ログレベルの除外 |
解説
grepの反転一致は、不要なログを除外して必要な情報だけを抽出する際に便利です。
障害調査ではERRORやWARNを除外したり、逆に特定ログ以外を確認したりする用途でよく利用されます。
grepの反転一致で一致しないデータを活用するポイント
grepの反転一致は、一致しない行を抽出するための便利な機能です。
-vオプションを利用することで、特定文字列や正規表現に一致するデータを除外できます。
grepの反転一致を理解し、適切な一致条件を設定することで、日々のコマンド操作をより快適に進められます。

