【问题标题】:Filtering a log file by keyword and coloring the output按关键字过滤日志文件并为输出着色
【发布时间】:2013-02-19 05:32:27
【问题描述】:

我编写了一个 bash 脚本,它使用 sed 创建一个命令,该命令通过关键字过滤文本,然后为输出着色。我做了很多试验和错误,并在谷歌上搜索技术。我知道这可以改进。有人可以提供建议吗?

我也希望能够像 tail 一样使用它 - 实时过滤和着色尾部输出。有什么想法吗?

提前致谢!

function multigrep(){

#THIS WORKS - Recreate this, using input parameters
#sed -En '/(App)|(Spe)/p' ./flashlog.txt;

filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt";
paramString="";

for element in "$@"
    do
        #echo $element;
        paramString="$paramString($element)|";
    done

#TRIM FINAL | OFF PARAMSTRING
paramString=${paramString:0:${#paramString}-1};

#CREATE SED EXPRESSION - '/($1)|($2)|(...)/p'
paramString="'/$paramString/p'";

#CREATE SED FUNCTION, CALL ON FILE
paramString="sed -En $paramString ./flashlog.txt"

echo $paramString;
echo "${txtbld}$(tput setaf 7)" > ./flashlog_output.txt;
eval $paramString >> ./flashlog_output.txt;
echo >> ./flashlog_output.txt;
#cat ./flashlog_output.txt;

cat ./flashlog_output.txt | while read LINE
do

    [[  $1 && ${1-x} ]] && 
        if grep -q $1 <<<$LINE; then
            echo "$(tput setaf 3)$LINE"
        fi

    [[  $2 && ${2-x} ]] && 
        if grep -q $2 <<<$LINE; then
            echo "$(tput setaf 7)$LINE"
        fi


    [[  $3 && ${3-x} ]] && 
        if grep -q $3 <<<$LINE; then
            echo "$(tput setaf 6)$LINE"
        fi

done

}

【问题讨论】:

    标签: bash shell unix text sed


    【解决方案1】:

    你知道colortail吗?我也在用它。您可以使用配置文件中的正则表达式配置着色。输出将如下所示:(是的!:)

    【讨论】:

    • 这正是我想要的!非常感谢。
    • 不客气。我建议你从源代码编译它。 Linux 发行版可能有旧版本的内存泄漏,这有时很烦人。但是,问题并不常见。
    猜你喜欢
    • 2010-09-27
    • 2023-03-07
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多