4.1 grep

Global Regular Expression Print

grepはパターンにマッチする行を検索・抽出するコマンドである。正規表現を使った強力な検索が可能。

基本構文

# 基本形
grep 'pattern' file.txt

# 複数ファイル
grep 'pattern' *.txt

# 再帰的検索
grep -r 'pattern' /path/to/dir/

# パイプで使用
cat file.txt | grep 'pattern'
ps aux | grep nginx

主要オプション

grepオプション

図1: grepの主要オプション

オプション 説明
-i 大文字小文字を区別しない grep -i 'error' log.txt
-v マッチしない行を表示 grep -v '#' config.txt
-n 行番号を表示 grep -n 'TODO' *.py
-r ディレクトリを再帰検索 grep -r 'func' src/
-c マッチ行数を表示 grep -c 'error' log.txt
-l マッチしたファイル名のみ grep -l 'pattern' *.txt

正規表現

パターン 意味
. 任意の1文字 a.c → abc, aXc
* 直前の0回以上 ab* → a, ab, abb
^ 行頭 ^Error
$ 行末 done$
[abc] いずれか1文字 [0-9]+
\b 単語境界 \bword\b
# 行頭がErrorで始まる行
grep '^Error' log.txt

# 数字を含む行
grep '[0-9]' file.txt

# IPアドレスパターン(拡張正規表現)
grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log

# 空行を除外
grep -v '^$' file.txt

実践例

# ログからエラー抽出
grep -i 'error\|warning' /var/log/syslog

# プロセス検索(grep自身を除外)
ps aux | grep nginx | grep -v grep

# 設定ファイルからコメント以外を抽出
grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'

# ソースコード内のTODO検索
grep -rn 'TODO\|FIXME' --include='*.py' src/
出典
[1] man grep - print lines that match patterns.
[2] man 7 regex - POSIX.2 regular expressions.