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