首页 > 解决方案 > 如何在 sed 中对模式进行颜色匹配

问题描述

天,

我有一个这样的日志搜索功能:

function searchLogs() {
    local logFile="$1"
    local filters="${@:2}"
    local sedScript='/^---/ !{H;$ !d};x';

    # loop over filters and add each to sed script
    for filter in $filters
    do
       # append filter
       sedScript=$sedScript';/'$filter'/ !d';
    done;

    # search log file for log events that contain ALL filters
    sed -e "$sedScript" "$logFile";
}

可以这样使用:

$ searchLogs <file> <pattern> <pattern> | less -R

...并将构建这样的命令

sed -e '/^---/ !{H;$ !d};x;/<pattern>/ !d;/<pattern>/ !d' <file> | less -R

...但我希望它还能为火柴上色...

...但是,我一点运气都没有。有谁知道如何为每场比赛着色sed

ps 我不想使用grep,因为我正在使用grep一个包装函数,我将它通过管道输入到日志文件的颜色部分以使它们更易于阅读,例如(使用粗体显示grep命令已经着色的内容)

----------

编号 = 12345

客户= SomeService

时间= 12:01

----------

标签: bashfunctionshellsedcolors

解决方案


仍然使用 grep 怎么样,并在本地为其设置 GREP_COLORS:

echo ab | GREP_COLORS='ms=1;33' grep --color=always a | GREP_COLORS='ms=1;32' grep --color=always b

推荐阅读