Eu tenho um script que vomita dados de E/S >>>
e <<<
simboliza a direção - entrada ( <<<
) ou saída ( >>>
).
<timestamp> >>>>>>>>>>
loads
of
output
<timestamp> <<<<<<<<<<
loads
of
input
Eu gostaria de pegar essa saída e colorir a entrada com uma cor e a saída com outra - mais ou menos como git diff
colore as diferenças nas versões dos arquivos.
Como posso fazer isso com o mínimo de digitação e de preferência como uma linha?
Responder1
Talvez algo assim awk
funcione para você:
awk 'BEGIN{ce="\033[0m"}
/>>>/{cs="\033[1;31m"}
/<<</{cs="\033[1;32m"}
{print cs$0ce}' your.data
Aquilo é:
BEGIN {
ce = "\033[0m"
}
/>>>/ {
cs = "\033[1;31m"
}
/<<</ {
cs = "\033[1;32m"
}
{
print cs $0 ce
}
Responder2
No interesse de soluções semânticas totalmente shell e independentes de terminal, aqui está outra maneira de fazer cores que utiliza tput
, que usa o banco de dados terminfo para fornecer a sequência correta de mudança de cores para quaisquer terminais que ele reconheça:
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.