Como posso manter os códigos de cores com a entrada grep?
Se eu usar dois grepcomandos consecutivos , por exemplo:
Então o primeiro padrão ("foo") não é realçado. De fato, parece que o grep remove os códigos de cores de sua entrada. Existe alguma maneira de evitar isso?
shell grep colors
— Chris2048
Outra pergunta com a mesma resposta: como você pode restaurar a saída colorida para um grep dentro de uma função bash?
Use --color=always.
grepdetecta se a saída é para um tubo (ou arquivo). Você quase nunca deseja cores quando a saída é arquivar - pois são seqüências de escape para o terminal. Tipicamente:
foo ^[[01;31m^[[Kbar^[[m^[[K
grep pattern file > result
Para substituir o uso --color=always.
grep --color=always pattern file | ...
Tendo arquivo:
ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz
grep --color=always ID file | grep --color=always 2013 | grep foo
iria colorir ID, 2013e foo.
grep --color=always ID file | grep 2013 | grep foo
iria colorir IDe foo, mas não 2013.
1 Importante: Você também deve se lembrar que a desordem adicionadadas cores é passada para o próximo comando da cadeia. Depois que o ID é colorido, você não pode (com facilidade), corresponder, por exemploID=111.
Em alguma ocasião, talvez alguém queira cores terminais em arquivo . Tente por exemplo
grep --color=always foo file > result
Embora o arquivo resultante tenha portabilidade muito limitada.
A coloração em si também é uma extensão.
Conforme mencionado pelo bom @slm , você pode adicionar:
export GREP_OPTIONS="--color=always"
para o seu .bashrcetc, mas não, a menos que você, por algum motivo, realmente entenda as implicações e ainda queira fazê-lo. Em muitos aspectos, isso se romperia grepdevido ao fato mencionado acima 1 .
Adicione um aliasse você o usa com frequência.
alias cgrep='grep --color=always'
GREP_OPTIONSe --color ter três opções : never, autoe always. Os dois primeiros devem ser os únicos considerados GREP_OPTIONS.
Você também pode conferir GREP_COLORSnas manpáginas ou no gnu grep .
Detalhes adicionais sobre esses métodos prós / contras aqui: stackoverflow.com/questions/867877/…
adicione isso à resposta também: export GREP_OPTIONS="--color=always"em um .bashrc torna as opções os padrões para qualquer greps, e você o acertou em cheio!
Good stuff neste Super Uuser Q & A: superuser.com/questions/36022/...
"grep detecta se a saída é para um tubo" - aha! Essa é a chave, o grep não está colorindo se faz parte de um cano. Deve haver um princípio de substituição contra esse tipo de coisa: - /
— Chris2048 12/13/13
@ Chris2048: Isso é padrão para a maioria das ferramentas que imprimem cores no terminal. Você pode encontrar mais detalhes com isso , sobre como é detectado, e isso mostra alguns problemas, por exemplo, ls e cores nos OS nativos do OSX lse nos coreutils do gnu.