Раскрашивайте разные фрагменты текста в одном выводе разными цветами

Раскрашивайте разные фрагменты текста в одном выводе разными цветами

У меня есть скрипт, который выдает данные ввода-вывода с >>>указанием <<<направления — либо вход ( <<<), либо выход ( >>>).

<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

В интересах полностью оболочных, независимых от терминалов семантических решений вот еще один способ создания цветов 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.

Связанный контент