Como grep MATCH input colorido?

3

Digamos que eu tenha saído de um comando que esteja colorido para o terminal. Eu quero combinar qualquer linha que contenha a cor amarela. Como posso fazer isso no grep, por exemplo: mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"

Nota: NÃO se trata de colorir a saída do grep ou adicionar cores. É apenas sobre como filtrar / combinar a cor da entrada no grep.

    
por Zombies 15.02.2018 / 21:52

2 respostas

6

Vamos usar tput para gerar o código de cores do seu terminal para amarelo e preto:

$ yel=$(tput setaf 3)
$ blk=$(tput setaf 0)

Vamos examinar o que o código amarelo realmente inclui:

$ echo -n "$yel" | hexdump -C
00000000  1b 5b 33 33 6d                                    |.[33m|
00000005

Agora, podemos usar grep para pesquisar o código de cor amarelo e imprimir a string que combina desde o início do código amarelo até o próximo código, seja qual for o código:

$ echo "abc ${yel}Yellow${blk} def" | grep -Eo $'\x1b\[33m.[^\x1b]*\x1b\[....'
Yellow 

Observe que o código de cores para amarelo inclui [ , que grep considera um caractere ativo regex. Assim, para corresponder a um literal [ , precisamos escapar dele por grep . Para fazer isso, usamos $'...' do bash para definir o código de cor com ['escaped.

É provável que haja mais de um código para produzir amarelo no seu terminal. Você desejará examinar a saída de qualquer comando que estiver usando para determinar quais códigos estão sendo usados e incluí-los em seu comando grep .

    
por 15.02.2018 / 22:13
-1
mycommand | grep -Pie 'yellow'
    
por 16.02.2018 / 03:35