grep の使い方

パターンに合う行を探す

書き方

grep [-i] [-v] [-n] [-c] [-r] [-E] [-o] パターン [ファイル...]

-i 大文字小文字を区別しない、-v 合わない行、-n 行番号、-c 件数、-r 再帰、-E 拡張正規表現、-o 合った部分だけ。

よく使うオプション

オプション意味
-i大文字と小文字を区別しない
-vパターンに合わない行を出す
-n行番号を付ける
-c合った行の数だけを出す
-rディレクトリの中を下までたどって探す
-l合った行のあるファイルの名前だけを出す
-E拡張正規表現を使う(| や + がそのまま使える)
-o行全体ではなく、合った部分だけを出す

例

$ grep -i error /var/log/messagesNov  7 10:02:11 web01 app[1234]: ERROR connection refused
Nov  7 10:02:15 web01 app[1234]: Error: retry 1/3

ログの中から error・Error・ERROR を含む行をまとめて探します。障害のときに最初に打つことが多い形です。

$ grep -rn Listen /etc/httpd/etc/httpd/conf/httpd.conf:47:Listen 80
/etc/httpd/conf.d/ssl.conf:5:Listen 443 https

/etc/httpd の下の設定ファイルを全部探し、Listen を書いたファイルと行番号を出します。どこで設定しているか分からないときに便利です。

$ grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'

# で始まるコメントの行と空の行を除き、実際に効いている設定だけを見ます。

$ grep -c 'Failed password' /var/log/secure42

SSH のログインに失敗した回数を数えます。-c を付けると行の中身は出ず、件数だけになります。

$ ps aux | grep -E 'httpd|nginx'

パイプで受け取ったプロセスの一覧から、httpd か nginx の行を探します。-E で「または」の | が使えます。

よくある間違い・注意

  • パターンに空白や * などの記号があるときは、'…' で囲みます。囲まないとシェルが先に解釈して、思ったとおりに探せません。
  • ps aux | grep httpd とすると、grep httpd 自身の行も出ます。気になるときは pgrep httpd を使います。
  • -r でたどるとき、/ のような大きな場所から探すと時間がかかります。探す場所をできるだけ絞ります。

実際に打って練習する

Linux レベル1 コースの Lv17「言葉で探す grep」で覚えます(第2章 宝探し(検索とテキスト処理))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

Lv1〜16 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

Linux コマンド一覧(LinuC レベル1 の範囲)へ戻る