您的位置:首页 > 其它

批处理查找方件中的关键词

2015-11-12 15:50 411 查看
--对于数据库来,如果开户了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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: