bashrc / bash_profileを使用せずにコマンド出力に色を付ける方法はありますか?

bashrc / bash_profileを使用せずにコマンド出力に色を付ける方法はありますか?

私はさまざまなプログラムから複数のログを読み取るプログラムを作成しました。 (grep私はまだログ全体を読む必要があるので、そのようなものを使用しません。ただ、特定の興味深い用語を別の色に設定してすぐに見つけることができることを願っています。)

私はこれを見つけましたでも、もう一度申し上げますが、私が探しているわけではありません。テキストをパイプする方法を探しています。

答え1

grepをぜひ使ってください。 Have^はクエリの1つなので、すべての行を取得できます(ただし、目に見える一致が含まれていない場合は無色になります)。

例:

grep -e '[[:upper:]][[:alnum:]]*' -e ^ <<EOF
This Is An
example file.
All lines 
in it will be printed, and all
words that start 
with a Capital
letter will be Colorized.
EOF

(これはheredocを使用します(シェルマニュアルで「Here Documents」を検索してください)。stdinまたは実際のファイルをパイプすることも機能します)。

答え2

コマンドの出力やファイルの内容を色分けするためにうまく機能する2つの簡単な方法を考えることができます。

  • grep- いくつかの高度なオプションを使用してファイルの残りの部分を表示し、複数の一致を作成することも可能です。例:

    grep --color -iE 'log|kernel' -C 999
    grep --color -iE 'log|kernel|$'
    

    最初の検索では大文字と小文字logが区別されず、kernel周囲の999行が表示されます。 2番目の検索logkernel各行の文字(提案どおり)ここ)大文字と小文字を区別しません。詳細については、可用性について問い合わせるか、man grepマニュアルを参照してください。GNU grepまたはOSX grep

  • python-pygments- 通過しなければならないpip。構文の強調に使用できます。語彙アナライザ処理したい項目に使用できます。

あるいは、一般的な形式の出力には次のものを使用できます。ANSIエスケープコード- 例えば:

echo -e "\033[31mred\033[0m"
echo -e "\033[34mblue\033[0m"

これは\033エスケープ文字で、その後さまざまな操作を実行するためのコードを指定できます。複数のコードを指定することもできます。

echo -e "\033[1;31mbold red\033[0m"
echo -e "\033[4;34mblue underlined\033[0m"

OSXのサポートは不明です。別の方法を試す必要があるかもしれません。エスケープ文字- 端末の色も必要になる場合があります。利用可能

答え3

テキストの色をランダムに変更するには、ANSIエスケープシーケンスを使用します。例えば、ESC[31分テキストの色が赤に変わります。ESC[37分白などを生産します。

sedを使用して、ストリーム内の特定の場所に特定の色のエスケープコードを挿入できます。ここで誰かがこれをしている例があります。

色の変更に加えて、さまざまな画面出力操作を実行できます。これは参考資料です。

関連情報