WAVE Log
grep

文字列を検索する

ファイル内の文字列を検索して該当する行を表示する
拡張子が .txt のファイルにある「diff」という文字列を検索する場合

# grep diff *.txt

標準出力の結果を検索する
「ps aux」というコマンドを実行し、その結果から「telnet」という文字列を含む行を表示する場合

# ps aux | grep telnet

オプション
 -c 該当行は表示せずに、該当した数を表示する
 -h 複数ファイルを検索対象としたときに、結果でファイル名を表示しない
 -i 大文字と小文字の区別をしない
 -l 該当ファイル名だけを表示する
 -L 該当しなかったファイル名だけを表示する
 -n 該当行の行番号を表示する
 -v 該当しない行を表示する
 -f file 検索パターンとしてfileの内容を使用する

再帰的にファイルの内容を検索する

カレントディレクトリ以下から、拡張子 php のファイルのみを対象に、文字列 hoge を含むファイル名と内容を出力

# grep -r hoge --include='*.php' ./

検索文字列をファイルから読み込んで複数検索

grep -f patterns.txt target.txt

grep -f は 各行をそのまま正規表現として扱うが、正規表現を使うなら -E を併用するのが一般的。

grep -E -f patterns.txt target.txt

-E は「拡張正規表現(Extended Regular Expression, ERE)を使う」という意味。
+ ? | () がそのまま使える。

固定文字列検索にしたいなら -F(正規表現は無効だが高速)

grep -F -f patterns.txt target.txt

パターンファイルに 空行 があると「空文字列検索」になり、空文字列は すべての行にマッチする。
特に、パターンファイルの最終行が改行で終わっていると空行があると判断してしまうので注意。

テキストファイルの行数を数える
行数のみ得たい場合は grep を使う

# grep -c '' file.txt