Como posso manter os códigos de cores com a entrada grep?

11

Se eu usar dois comandos grep consecutivos, por exemplo:

echo "foo bar" | grep foo | grep bar

O primeiro padrão ("foo") não é destacado. Na verdade, parece que o grep remove códigos de cores de sua entrada. Existe alguma maneira de evitar isso?

    
por Chris2048 12.05.2013 / 17:16

1 resposta

17

Use --color=always .

grep detecta se a saída é para um pipe (ou arquivo). Você nunca mais quer cores quando a saída é para arquivo - como isso é seqüências de escape para o terminal. Tipicamente:

foo ^[[01;31m^[[Kbar^[[m^[[K

de, por exemplo:

grep pattern file > result

Para substituir o uso --color=always .

grep --color=always pattern file | ...

Exemplo:

Ter arquivo:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

Então

grep --color=always ID file | grep --color=always 2013 | grep foo

coloria ID , 2013 e foo .

grep --color=always ID file | grep 2013 | grep foo

coloria ID e foo , mas não 2013 .

1 Importante: Você também precisa lembrar que a clutter adicionada das cores é passada para o próximo comando na cadeia. Quando o código for colorido, você não poderá (com facilidade) corresponder, por exemplo, ID=111 .

Em algumas ocasiões, talvez você queira cores de terminal no arquivo . Tente por exemplo.

 grep --color=always foo file > result
 cat result

Embora o arquivo resultante tenha portabilidade muito limitada.

A coloração em si também é uma extensão.

Como mencionado pelo bom @slm , você pode adicionar:

export GREP_OPTIONS="--color=always"

para o seu .bashrc etc, mas não a menos que você, por algum motivo, realmente entenda as implicações e ainda queira fazê-lo. Em muitos casos, isso quebraria grep devido ao fato mencionado acima 1 .

Adicione um alias se você usá-lo com frequência.

 alias cgrep='grep --color=always'

GREP_OPTIONS e --color escolha três opções : never , auto e always . Os dois primeiros devem ser os únicos considerados para GREP_OPTIONS .

Você também pode verificar GREP_COLORS nas páginas man ou no gnu grep .

    
por 12.05.2013 / 17:26