本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、「grep」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、指定した文字が含まれている行だけを抽出する「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
先ほどの検索で、「video」という文字列を検索しましたが、検索結果には「video」と「vboxvideo」が表示されていました。“videoという単語のみ”を検索対象としたい場合には、「-w」オプション(--word-regexp)を使用します(画面2)。
dmesg | grep -w video
(dmesgの実行結果から「video」という単語が含まれている行だけを表示)
grep -w video テキストファイル
(テキストファイルから「video」という単語が含まれている行だけを表示)
文字列を検索する際には、該当する行の前後も表示されていると分かりやすい場合があります。例えば、前後2行ずつ表示したい場合は、「-2」のように数字で指定します(画面3)。これは「-C(--context=)」オプションと同じです。
dmesg | grep -w -2 video
(dmesgの実行結果からvideoという単語(-wオプション)が含まれる行を前後2行含めて表示)
grep -2 検索文字列 テキストファイル
(テキストファイルから文字列を検索し、検索結果の前後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 検索文字列 テキストファイル
(テキストファイルから文字列を検索し、行番号と共に表示)
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.