使用不同的颜色对同一输出中的不同文本块进行着色

使用不同的颜色对同一输出中的不同文本块进行着色

我有一个脚本,可以输出带有符号方向的 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.

相关内容