Colorize diferentes pedaços de texto na mesma saída com cores diferentes

2

Eu tenho um script que lança dados de E / S com >>> e <<< simbolizando 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 - como git diff colore as diferenças nas versões dos arquivos.

Como posso fazer isso com a menor quantidade de digitação e, de preferência, como um one-liner?

    
por AnthonyK 27.04.2017 / 09:31

2 respostas

2

Talvez algo assim com awk funcione para você:

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

Isto é:

BEGIN {
    ce = "3[0m"
}
/>>>/ {
    cs = "3[1;31m"
}
/<<</ {
    cs = "3[1;32m"
}
{
    print cs $0 ce
}
    
por 27.04.2017 / 10:50
0

No interesse de soluções semânticas, independentes de terminal e com todos os shell, 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 cor para qualquer terminal que reconheça: / p>

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.
    
por 28.04.2017 / 18:28

Tags