![ターミナルからのすべての出力を色分けする](https://rvso.com/image/1087127/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%8B%E3%82%89%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E5%87%BA%E5%8A%9B%E3%82%92%E8%89%B2%E5%88%86%E3%81%91%E3%81%99%E3%82%8B.png)
端末の出力をすべて、パーソナライズされた方法で色付けする方法はありますか? 例: 次のコマンドを発行すると、sudo apt-get update
テキストの列が表示されます。このテキストに「ERROR」などの単語がある場合は赤に、 「DONE」や「FINISHED」などの単語がある場合は緑に色付けします。
これは単なる例であり、他のプログラムの色付き出力では問題が発生する可能性があることは理解していますが、これが可能かどうか興味があります。
現在は ZSH を使用していますが、あらゆるターミナル エミュレーターの回答も受け付けます。
答え1
sed
単語境界で区切られた「ERROR」、「DONE」、「FINISHED」文字列を、囲まれた同じ文字列に置き換えるために使用できます。ANSI カラーエスケープシーケンス(便宜上、コマンドにエイリアスを付けることもできます~/.bashrc
。ご覧のとおり、これは Zsh では機能しますが、エスケープ シーケンスを解釈するのは端末なので、ANSI / VT100 互換の端末で実行されているどのシェルでも機能します)。
sudo apt-get update |& sed 's/\bERROR\b/\x1B[1;31m&\x1B[0m/; s/\bDONE\b/\x1B[1;32m&\x1B[0m/; s/\bFINISHED\b/\x1B[1;34m&\x1B[0m/'
sudo apt-get update |&
sed '
s/\bERROR\b/\x1B[1;31m&\x1B[0m/
s/\bDONE\b/\x1B[1;32m&\x1B[0m/
s/\bFINISHED\b/\x1B[1;34m&\x1B[0m/
'