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/secure42SSH のログインに失敗した回数を数えます。-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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。