--对于数据库来,如果开户了sql日志记录,则会很快的产生大量的日志文件,如果此时要查找系统中产生的错误日志或者警告日志,
--在众多文件中无易于大海捞针,如果一个一个日志的查找的话
--以下脚本为查找特定范围内的特定关键词
--以下为脚本内容
cat mathc_file.sh
#!/bin/bash
help_msg (){
echo ""
echo "Usage:"
echo " -m 多少分钟之间修改的文件,如果为null,则默认为30分钟之前,如果要忽略此参数请给其值 -1 "
echo " -d 要查找文件所在的文件夹,如果为null,则为当前文件夹"
echo " -f 要查找的文件名,如果要匹配多个文件,请使用正则,如果为null,则为满足条件的所有文件"
echo " -o 查找之后的输出文件,如果为null,则默认输出到 /tmp/tmp_file.txt "
echo " -k 查找的关键字,如果需要匹配多个,请使用正则表达式"
echo " -n 每个文件最多输出多行匹配的数据,如果为null,则默认为10"
echo " -h 系统帮助"
echo ""
exit 0
}
# end functions
while getopts "m:d:f:o:k:n:" flag
do
case $flag in
m) MMINE=$OPTARG
;;
d) DIRECTORY=$OPTARG
;;
f) INPUT_FILE=$OPTARG
;;
o) OUTPUT_FILE=$OPTARG
;;
k) KEY=$OPTARG
;;
n) NUMBER=$OPTARG
;;
\?|h) help_msg
;;
esac
done
if [ $MMINE"x" == "x" ]
then
MMINE=30
fi
if [ $DIRECTORY"x" == "x" ]
then
DIRECTORY=$PWD
fi
if [ $INPUT_FILE"x" == "x" ]
then
INPUT_FILE=*
fi
if [ $OUTPUT_FILE"x" == "x" ]
then
OUTPUT_FILE=/tmp/tmp_file.txt
fi
if [ $KEY"x" == "x" ]
then
exit 0
fi
if [ $NUMBER"x" == "x" ]
then
NUMBER=10
fi
if [ ! -f $OUTPUT_FILE ]
then
touch $OUTPUT_FILE
else
echo "" > $OUTPUT_FILE
fi
for file in $(find $DIRECTORY/$INPUT_FILE -mmin -$MMINE)
do
echo "正在匹配文件:$file"
echo "############################################################################################" >> $OUTPUT_FILE
echo "############################################################################################" >> $OUTPUT_FILE
echo "以下的内容来自匹配的文件 : ${file},最多匹配$NUMBER个" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
awk 'BEGIN {FS=",";i=1} { if($0~/'$KEY'/) { if(i<='$NUMBER') {i=i+1 ; print $0}else{exit}}}' ${file} >> $OUTPUT_FILE
done
echo "脚本执行结果请详见文件: $OUTPUT_FILE"
--以下为脚本使用方法
[root@rudy pg_log]# ./mathc_file.sh -h
./mathc_file.sh: illegal option -- h
Usage:
-m 多少分钟之间修改的文件,如果为null,则默认为30分钟之前,如果要忽略此参数请给其值 -1
-d 要查找文件所在的文件夹,如果为null,则为当前文件夹
-f 要查找的文件名,如果要匹配多个文件,请使用正则,如果为null,则为满足条件的所有文件
-o 查找之后的输出文件,如果为null,则默认输出到 /tmp/tmp_file.txt
-k 查找的关键字,如果需要匹配多个,请使用正则表达式
-n 每个文件最多输出多行匹配的数据,如果为null,则默认为10
-h 系统帮助
--匹配一个关键词,匹配含有关键词permis的文件内容,一个最多匹配2个
./mathc_file.sh -m 500 -k permis -f "postgres*" -n 2
--匹配多个关键词,匹配含有关键词ERROR和permis的文件内容,一个最多匹配2个
./mathc_file.sh -m 500 -k "ERROR(.)*permis" -f "postgres*" -n 2
--匹配特定类型的文件
./mathc_file.sh -m 500 -k "ERROR(.)*permis" -f "postgres*.csv" -n 2
--匹配指定目录的文件
./mathc_file.sh -m 1500 -k permis -f "postgres*" -n 2 -d "/usr/local/postgresql/9.3.4/5434/pg_log"