GNU/Linux >> Linux の 問題 >  >> Linux

シェルの正規表現に基づくカラーハイライト出力

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 --colorls --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

Linux
  1. 2>&1および他のシェルスクリプトのイディオムを理解する

  2. コマンドの出力をシェル変数に割り当てる方法は?

  3. コマンドの出力をシェル変数に保存しますか?

  1. シェルで`command`と$(command)を使用してコマンド出力を取得することの違いは何ですか?

  2. コマンドまたはシェルスクリプトの出力がStdoutまたはStderrであるかどうかを確認する方法は?

  3. Linux のシェル出力を HTML に変換するには?

  1. BASH で実行したプログラムのカラー出力

  2. シェル コマンドの出力の最初の行を取得する

  3. 成功した場合にのみシェル コマンドの出力を非表示にしますか?