2014-02-15
grepで否定, OR, AND検索や正規表現を使う方法
[ PR ]
巨大なファイルの確認に便利なgrep
grep使ってますか?
grepやsed, exなどは、大きすぎてエディタで開けないようなときにとても便利です。
echo -e "Apple\nOrange\nGrape" | grep "Orange"
# Orange
tail -f /Application/MAMP/logs/php_errors.txt | grep "Error"
ただ、例えば「PHP Notice」だけを除外するにはどうしたらいいか迷いますよね。
否定は grep -v
実は grep -v とすると否定になります。
echo -e "Apple\nOrange\nGrape" | grep -v "Orange"
# Apple
# Grape
tail -f /Application/MAMP/logs/php_errors.txt | grep -v "PHP Notice"
これでエラーと警告だけ見ることができますね。
OR検索(または) は grep -e または egrep
ORを実現するためには、-e オプションをつけるか、egrep(または互換性のあるgrep)を使います。
echo -e "Apple\nOrange\nGrape" | grep -e "Apple" -e "Orange"
# Apple
# Orange
echo -e "Apple\nOrange\nGrape" | egrep "Apple|Orange"
# Apple
# Orange
tail -f /Application/MAMP/logs/php_errors.txt | grep -v "Warning|Error"
AND検索には grep | grep | grep ...
AND検索をするには、grepを複数重ねます。
echo -e "Apple\nOrange\nGrape" | grep "r" | grep "a"
# Orange
# Grape
egrepでもOKです。
echo -e "Apple\nOrange\nGrape" | egrep "r.*a"
# Orange
# Grape
正規表現を使うには egrep
先程ちょっと出てきたegrepは、正規表現が使えます。
例えば「5文字の単語」だけを取り出すには次のようにします。
echo -e "Apple\nOrange\nGrape" | egrep "^.{5}$"
# Apple
# Grape
AまたはOで始まる単語を検索するにはこうです。
echo -e "Apple\nOrange\nGrape" | egrep "^[AO]"
# Apple
# Orange
まとめ
grepとsedを使いこなせるようになると、大きなファイルを楽に扱えるようになります。
tail -f と組み合わせて使うと、エラーログを見るのに役立ちます。
例えば、PHPのエラーを画面に出力せずに、ターミナルで確認できるようになります。