Colorea diferentes fragmentos de texto en el mismo resultado con diferentes colores

Colorea diferentes fragmentos de texto en el mismo resultado con diferentes colores

Tengo un script que arroja datos de E/S con >>>una <<<dirección que simboliza, ya sea entrada ( <<<) o salida ( >>>).

<timestamp> >>>>>>>>>>
loads
of
output

<timestamp> <<<<<<<<<<
loads
of
input

Me gustaría tomar este resultado y colorear la entrada con un color y la salida con otro, algo así como git diffcolorear las diferencias en las versiones de los archivos.

¿Cómo puedo hacer esto con la menor cantidad de escritura y preferiblemente como una sola línea?

Respuesta1

Quizás algo como esto awkfuncione para ti:

awk 'BEGIN{ce="\033[0m"}
     />>>/{cs="\033[1;31m"}
     /<<</{cs="\033[1;32m"}
     {print cs$0ce}' your.data

Eso es:

BEGIN {
    ce = "\033[0m"
}
/>>>/ {
    cs = "\033[1;31m"
}
/<<</ {
    cs = "\033[1;32m"
}
{
    print cs $0 ce
}

Respuesta2

En aras de soluciones semánticas independientes de terminales y de todo shell, aquí hay otra forma de hacer colores que utiliza tput, que utiliza la base de datos terminfo para proporcionar la secuencia correcta de cambio de color para cualquier terminal que reconozca:

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.

información relacionada