Perlを使用したテール出力のカラー化

Perlを使用したテール出力のカラー化
tail -f logfile.log | perl -pe 's/.*foo*/\e[1;41m$&\e[0m/g'    

「foo」パターンを含むlogfile.logファイルのすべての行は色で表示されます。

ライン全体ではなく正確なパターンを強調するにはどうすればよいですか?

echo "WARN ERROR foo"|sed 's#WARN#\x1b[33m&#; s#ERROR#\x1b[31m&#; s#foo#\x1b[32m&#'    

私の言葉は、私がこのようなことをしたいとしたらどうしますか?

ベストアンサー1

sedまず、Perlを次&のように変更して使用できます$&

echo "WARN ERROR foo" | 
    perl -pe 's#WARN#\x1b[33m$&#; s#ERROR#\x1b[31m$&#; s#foo#\x1b[32m$&#'    

または、元のPerlアプローチを使用して.*一致させたいパターンの側面を削除するだけです。

tail -f logfile.log | perl -pe 's/foo/\e[1;41m$&\e[0m/g'    

より一般的なアプローチのために、私が投稿した小さなスクリプトを使うことができます。私の答えはここにあります。このアプリを使用すると、それぞれ異なる色で最大10パターンを塗りつぶすことができます。たとえば、単語、およびを大文字ERRORと小文字を区別せずに異なる色で指定するには、次のようにします。WARNINGfoo

tail -f logfile.log | color.pl -il "error,warning,foo"

おすすめ記事