同じ出力内の異なるテキストのチャンクを異なる色で色付けする

同じ出力内の異なるテキストのチャンクを異なる色で色付けする

入力 ( ) または出力 ( )のいずれかの方向を表す>>>とを含む I/O データを吐き出すスクリプトがあります。<<<<<<>>>

<timestamp> >>>>>>>>>>
loads
of
output

<timestamp> <<<<<<<<<<
loads
of
input

この出力を取得して、入力をある色で色付けし、出力を別の色で色付けしたいと思いますgit diff。ファイル バージョンの違いを色付けする方法と似ています。

これを最小限の入力で、できればワンライナーで実行するにはどうすればよいですか?

答え1

おそらく、次のようなものがawkあなたには有効でしょう:

awk 'BEGIN{ce="\033[0m"}
     />>>/{cs="\033[1;31m"}
     /<<</{cs="\033[1;32m"}
     {print cs$0ce}' your.data

あれは:

BEGIN {
    ce = "\033[0m"
}
/>>>/ {
    cs = "\033[1;31m"
}
/<<</ {
    cs = "\033[1;32m"
}
{
    print cs $0 ce
}

答え2

すべてのシェル、端末に依存しないセマンティック ソリューションのために、 を利用して色を設定する別の方法を次に示します。 は、tputterminfo データベースを使用して、認識する端末に応じて正しい色変更シーケンスを提供します。

black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
off=$(tput sgr0)

echo ${red}some red text${blue} some blue text${green} and green${off} and back to normal.

関連情報