2

ログ ファイルからキーワードを選択し、用語を強調表示する次のスクリプトを作成しました。

#!/bin/bash
case "$1" in
    *.log) sed -e "s/\(.*\[Error\ \].*\)/\x1B[31m&\x1b[0m/" "$1" \
            | sed -e "s/\(.*\[Warn\ \ \].*\)/\x1B[33m&\x1b[0m/" \
            | sed -e "s/\(.*\[Info\ \ \].*\)/\x1B[32m&\x1b[0m/" \
            | sed -e "s/\(.*\[Debug\ \].*\)/\x1B[32m&\x1b[0m/" 
    ;;
esac

フォロー/テールレス(Shift + F)を試行するまでは問題なく動作し、その時点で新しいログ行のテールに失敗します。理由はありますか?

4

1 に答える 1

2

これにより、スクリプトに引数として渡すものが色分けされます。代わりに必要なのは、標準入力から読み取ることです。次のループで case ステートメントをラップします。

while read LINE; do
    case "$LINE" in
         # ...  rest of your code here
    esac
done

これで、スクリプトにパイプできます。

tail -f somefile | colorize_script.sh

追加の回答:

数年前にも同じニーズがあったので、grep のように機能するが、一致しないテキストを非表示にする代わりに一致するテキストを色付けするスクリプトを作成しました。システムに Tcl がある場合は、ここから私のスクリプトを取得できます: http://wiki.tcl.tk/38096

コード (わずか 200 行) を空のファイルにコピー アンド ペーストし、chmod して実行可能にします。cgrep (color-grep) という名前を付けて、実行可能パスのどこかに配置します。これで、次のようなことができます。

tail -f somefile | cgrep '.*\[Error\s*\].*' -fg yellow -bg red
于 2013-05-10T04:52:12.487 に答える