如何使用 bash 脚本匹配日志文件中同一行中出现的多个关键字

如何使用 bash 脚本匹配日志文件中同一行中出现的多个关键字

我创建了一个包含关键字的数组,以在日志文件中进行匹配,并在标准输出上显示匹配的行。如果一行包含多个关键字,我希望输出突出显示在一行中找到的所有关键字。目前,它只为一场比赛着色。如果两个关键字位于同一行,则只有一个是彩色的。输出应该显示在当前的标准输出上。

当前样本输出。E:关键字不是彩色的,而是Unable彩色的。

乙:无法找到软件包 docker

#!/bin/bash

search_keywords=("ERROR" "Err" "E:" "W:" "Couldn't" "cleanly" "error" "unable" "failed" "fatal")

log_file="/home/user/example.log"

    for keyword in "${search_keywords[@]}"
    do
        grep -n --color "$keyword" $log_file
    done

答案1

按照@balki 概述的示例:

#! /usr/bin/env bash

search_keywords=( "ERROR" "Err" "E:" "W:" "Couldn't" "cleanly" "error" "unable" "failed" "fatal" )
data="E: Unable to locate package docker"

declare -a flags

for keyword in "${search_keywords[@]}"; do
    flags+=( -e $keyword )
done

grep -i --color=always "${flags[@]}" <<< "$data"

答案2

勾选-e-f选择人 grep

❯ cat > /tmp/logfile <<EOM
E: Unable to locate package docker
EOM

❯ grep -i --color -f - /tmp/logfile <<EOM
ERROR
Err
E:
W:
Couldn't
cleanly
error
unable
failed
fatal
EOM

E:Unable突出显示

E: Unable to locate package docker

使用-e

❯ grep --color -e 'E:' -e 'unable' -i /tmp/logfile
E: Unable to locate package docker

相关内容