Bashスクリプトを使用してログファイルの同じ行に表示される複数のキーワードを一致させる方法

Bashスクリプトを使用してログファイルの同じ行に表示される複数のキーワードを一致させる方法

ログファイルで一致させるキーワードを含む配列を作成し、一致する行をstdoutに表示しました。 1行に複数のキーワードが含まれている場合は、1行のすべてのキーワードを強調表示するように出力したいと思います。現時点では、一致する色の1つだけを着色します。 2 つのキーワードが同じ行にある場合は、1 つだけ色が付けられます。出力は現在の標準出力に表示する必要があります。

現在のサンプル出力。E:キーワードには色はありませんUnable

第二:できないパッケージドッカーを探す

#!/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

関連情報