Bash
如何使用bash腳本匹配出現在同一行的日誌文件中的多個關鍵字
我創建了一個包含關鍵字的數組以在日誌文件中匹配並在標準輸出上顯示匹配的行。如果一行包含多個關鍵字,我希望輸出突出顯示它在一行中找到的所有關鍵字。目前,它只為一場比賽著色。如果兩個關鍵字在同一行,則只有一個是彩色的。輸出應該顯示在它目前所做的標準輸出上。
目前樣本輸出。
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