Bash

如何使用bash腳本匹配出現在同一行的日誌文件中的多個關鍵字

  • July 24, 2022

我創建了一個包含關鍵字的數組以在日誌文件中匹配並在標準輸出上顯示匹配的行。如果一行包含多個關鍵字,我希望輸出突出顯示它在一行中找到的所有關鍵字。目前,它只為一場比賽著色。如果兩個關鍵字在同一行,則只有一個是彩色的。輸出應該顯示在它目前所做的標準輸出上。

目前樣本輸出。E:關鍵字不是彩色的,而是Unable

E:無法找到包 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

按照@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"

在man grep中檢查-e-f選項

❯ 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

引用自:https://unix.stackexchange.com/questions/711039