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 diff
colorear 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 awk
funcione 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.