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