utte

grep パターンに一致する行を検索する

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

試してみる

主なオプション

-i大文字と小文字を区別しない
-v一致しない行を表示する
-n行番号を付ける
-c一致した行数だけ表示する
-rディレクトリを再帰的に検索する
-l一致したファイル名だけ表示する
-E拡張正規表現を使う(egrep と同じ)
-w単語として一致するものだけ対象にする

解説

基本

grep は、ファイルや標準入力から、パターンに一致する行を探して表示します。パターンには、文字列のほか正規表現が使えます。ps aux | grep sshd のように、他のコマンドの出力を絞り込む使い方もよくあります。

終了コード

一致する行があれば 0、なければ 1、エラーは 2 を返します。スクリプトで if grep -q パターン ファイル; then のように、存在確認に使えます。-q は何も出力しません。

正規表現

標準は基本正規表現です。^ は行頭、$ は行末、. は任意の1文字、* は直前の文字の繰り返しです。-E を付けると、+、?、|、() がそのまま使えます。正規表現として扱いたくない文字列は、-F で固定文字列として検索します。

前後の行

-A 2 は一致した行の後ろ2行、-B 2 は前2行、-C 2 は前後2行をあわせて表示します。

気をつけること

パターンに $ やスペースを含むときは、シェルに展開されないよう、クォートで囲みます。-r でディレクトリを検索すると、複数のファイルが対象になるため、各行の先頭にファイル名が付きます。

このコマンドを使う問題

  1. iノード番号から同じファイルを指すハードリンクを探す
  2. teeでパイプの途中の結果をファイルに保存する
  3. grepで大文字小文字を区別せずに行を抜き出す
  4. grep -E で複数の語のどれかに一致する行を探す
  5. 設定ファイルからコメント行と空行を取り除く
  6. lspciでPCIデバイスのアドレスを調べる

関連するコマンド

LinuC 101の出題範囲