連載
» 2016年04月06日 05時00分 UPDATE

Linux基本コマンドTips(9):【 grep 】コマンド――特定の文字を含む行を抽出する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「grep」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、指定した文字が含まれている行だけを抽出する「grep」コマンドです。

grepコマンドとは?

 「grep」は、ファイルの中で「文字列(パターン)」が含まれている行を表示するコマンドです。検索対象には、複数のファイルやディレクトリを指定できます。

 ファイルを指定しなかった場合は、標準入力から読み込みます。パイプ(|)と組み合わせて、他のコマンドの出力結果から必要な箇所だけを絞り込んで表示する際によく使われます。


grepコマンドの書式

grep [オプション] 検索パターン ファイル

コマンド | grep [オプション] 検索パターン

※[ ]は省略可能な引数を示しています



grepコマンドの主なオプション

 grepコマンドの主なオプションは次の通りです。

●検索パターン関連のオプション
短いオプション 長いオプション 意味
-e 検索パターン --regexp=パターン 検索パターンを指定する
-G --basic-regexp 検索に基本正規表現を使う
-E --extended-regexp 検索に拡張正規表現を使う
-P --perl-regexp 検索にPerl正規表現を使う
-f ファイル --file=ファイル ファイルに書かれているパターンを検索する
-i --ignore-case 大文字と小文字を区別しない
-w --word-regexp 単語全体でパターンと一致するものを検索する(「単語単位で検索する」を参照)
-x --line-regexp 行全体がパターンと一致するものを検索する

●表示関連のオプション
短いオプション 長いオプション 意味
-v --invert-match パターンに一致しない行を表示する
-s --no-messages エラーメッセージを表示しない
-q --quiet
--silent
結果を表示しない(主にシェルスクリプトなどで判定用に使う)
-L --files-without-match 一致するものが含まれていないファイルのファイル名のみ表示する
-l --files-with-matches 一致するものが含まれているファイルのファイル名のみ表示する
-c --count 一致するものが含まれている回数のみ表示
-m 回数 --max-count=回数 パターンが指定した回数に達したら処理を終了する
-o --only-matching 一致した箇所だけを表示する(通常は行単位で表示)
-n --line-number 行番号を併せて表示する(「行番号付きで表示する」を参照)
-b --byte-offset パターンが何文字目にあるかを併せて表示する
-H --with-filename ファイル名を併せて表示する
-h --no-filename ファイル名を表示しない(複数ファイル指定時)
--color=WHEN 見つかったパターンを目立たせる(WHEN部分にはalways、never、autoを指定)
-B 行数 --before-context=行数 一致した行の前の行も表示する(「前後の行も表示する」を参照)
-A 行数 --after-context=行数 一致した行の後の行も表示する(「前後の行も表示する」を参照)
-C 行数,-行数 --context=行数 一致した行の前後の行も表示する

●検索対象関連のオプション
短いオプション 長いオプション 意味
-d ACTION --directories=ACTION 検索対象にディレクトリを指定した場合の動作(ACTION部分にはread、recurse、skipを指定)
-r --recursive ディレクトリを指定した場合はサブディレクトリ内のファイルも含めて検索する(--directories=recurse相当)
-R --dereference-recursive サブディレクトリも含めて検索、さらにシンボリックリンクの先も対象とする
--include=パターン パターンにマッチするファイルだけを対象とする
--exclude=パターン パターンにマッチするファイルは検索対象から除外する
--exclude-from=ファイル 対象から除外するファイル名のパターンをファイルから読み込む
--exclude-dir=パターン パターンにマッチするディレクトリは検索対象から除外する


コマンドの実行結果から必要な箇所だけを抽出する

 「dmesg」コマンド(起動時のシステムメッセージを再表示するコマンド)の実行結果から、grepコマンドで“video”という文字列を含む行だけを表示したい場合は「dmesg | grep video」と指定します(画面1)。

コマンド実行例

dmesg | grep video


画面1 画面1 dmesgコマンドの実行結果から、「video」という文字列が含まれている行だけを表示する


単語単位で検索する

 先ほどの検索で、「video」という文字列を検索しましたが、検索結果には「video」と「vboxvideo」が表示されていました。“videoという単語のみ”を検索対象としたい場合には、「-w」オプション(--word-regexp)を使用します(画面2)。

コマンド実行例

dmesg | grep -w video

(dmesgの実行結果から「video」という単語が含まれている行だけを表示)

grep -w video テキストファイル

(テキストファイルから「video」という単語が含まれている行だけを表示)


画面3 画面3 dmesgコマンドの実行結果から、「-w」オプションで「video」という単語が含まれている行だけを表示する


前後の行も表示する

 文字列を検索する際には、該当する行の前後も表示されていると分かりやすい場合があります。例えば、前後2行ずつ表示したい場合は、「-2」のように数字で指定します(画面3)。これは「-C(--context=)」オプションと同じです。

コマンド実行例

dmesg | grep -w -2 video

(dmesgの実行結果からvideoという単語(-wオプション)が含まれる行を前後2行含めて表示)

grep -2 検索文字列 テキストファイル

(テキストファイルから文字列を検索し、検索結果の前後2行も表示)


画面3 画面3 dmesgコマンドの実行結果から、「video」という単語が含まれている行を、前後2行も含めて表示する

 この他、「-B(--before-context=)」オプションや「-A(--after-context=)」オプションで前の行だけ、後ろの行だけを指定することもできます。

コマンド実行例

grep -B 2 検索文字列 テキストファイル

(テキストファイルから文字列を検索し、検索結果の前の2行も表示)

grep -A 2 検索文字列 テキストファイル

(テキストファイルから文字列を検索し、検索結果の後の2行も表示)




行番号付きで表示する

 grepコマンドでの検索結果に行番号を付けて表示したい場合は、「-n」オプション(--line-number)を使用します。「行番号:〜」のように表示されますが、前後の行も併せて表示している場合は、前後の行は「行番号-〜」のように「-」記号で、該当する行は「:」記号で示されます(画面4)。

コマンド実行例

dmesg | grep -w -2 video

(dmesgの実行結果からvideoという単語(-wオプション)が含まれる行を前後2行含めて(-2)行番号付き(-n)で表示)

grep -n 検索文字列 テキストファイル

(テキストファイルから文字列を検索し、行番号と共に表示)


画面4 画面4 dmesgコマンドの実行結果から、「video」という単語が含まれている行を前後2行も含めて、行番号付きで表示する


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。