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