superuser.com に答えがあります:
your-command | grep -E --color 'pattern|$'
または
your-command | grep --color 'pattern\|$'
これは「各行のパターンまたは行末に一致します。パターンのみが強調表示されます...」
試すことができます (もう少しエスケープが必要かもしれません):
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
これをグローバルに有効にしたい場合は、出力をパイプするプロセスではなく、ターミナル機能が必要です。パイプは一部のコマンドを混乱させるためです (2 つの問題は、stdout と stderr が順不同に見えることと、バッファリングされており、一部のコマンドは端末への出力時に異なる動作をするだけです)。
この機能を備えた「従来の」端末は知りません。 term
で、Emacs で簡単に実行できます。 バッファ:font-lock-keywords
を構成します term-mode
の場合 .
ただし、常にその機能が本当に必要かどうかを慎重に検討する必要があります。コマンドに独自の色がある場合 (例:grep --color
、 ls --color
)?たぶん、colorizer コマンドに短いエイリアスを定義して myCommand 2>&1|c
を実行するほうがよいでしょう。 myCommand
を色付けしたいとき の出力。また、特定の always-colorize コマンドにエイリアスを設定することもできます。
パイプラインの戻りステータスはその 最後 であることに注意してください コマンドなので、 myCommand | c
を実行すると 、あなたは c
のステータスを取得します 、 myCommand
ではありません . w myCommand
として使用できる、この問題を回避する bash ラッパーを次に示します。 :
w () {
"[email protected]" | c
return $PIPESTATUS[0]
}
次のようなプログラムを使用できます:
- spc (スーパーキャット)
- grc (ジェネリック カラーライザー)
- ハイライト
- ヒストリング
- ピグメンテーション
- grep --color
このようなことはできますが、コマンドは tty を認識しません (実行を拒否したり、異なる動作をしたり、奇妙なことをしたりするものもあります):
exec > >(histring -fEi error) # Bash