使用不同的顏色對同一輸出中的不同文字區塊進行著色

使用不同的顏色對同一輸出中的不同文字區塊進行著色

我有一個腳本,可以輸出帶有符號方向的 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

為了實現全 shell、獨立於終端的語義解決方案,這裡是另一種利用 進行顏色處理的方法tput,它使用 terminfo 資料庫為其識別的任何終端提供正確的顏色變更序列:

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.

相關內容