find + cat + grepでファイルを検索するスクリプト
例えば、ログファイルの中に特定のエラーメッセージがないか検索したいとします。
ディレクトリの全ファイルを対象にする場合find + cat + grepを組み合わせて使うのですが、マッチした行だけ表示されてファイル名が出ないのが惜しいです。
そこで、マッチした場合はファイル名を先に表示するような簡易スクリプトを作ってみました。
#!/bin/sh # 引数チェック if [ $# -ne 3 ]; then echo "Error" exit 1 fi # 検索ディレクトリ DIR=$1 # 検索ファイル FILE=$2 # 検索語句 WORD=$3 for file in `find $DIR -name $FILE | sort` do # マッチした場合のみ表示 if result=`cat -n $file | grep "$WORD"` then echo $file echo echo -e "$result" echo fi done
これをsearchという名前にして、/usr/local/binに置きます。
「/var/log/imarket/tdnet」ディレクトリの「*.log」ファイルから「"Download PDF File Error"」という語句を検索する場合、以下のように書きます。
search /var/log/imarket/tdnet *.log "Download PDF File Error"
出力はこんな感じです。
ファイル名に続いて行数と該当行が表示されます。
/var/log/imarket/tdnet/application-2012-09-20.log 4443 java.lang.RuntimeException: Download PDF File Error : 140120120920007971.pdf /var/log/imarket/tdnet/application-2012-10-05.log 3745 java.lang.RuntimeException: Download PDF File Error : 140120121005014395.pdf 4472 java.lang.RuntimeException: Download PDF File Error : 140120121005014510.pdf ...以下省略