grep: como colorir 2 palavras-chave?

9

Eu sei grep 2 palavras-chave usando 1 comando, mas só consigo colorir um deles na saída. Aqui está o meu comando:

grep 'keyword1' file.log | grep 'keyword2'

Apenas keyword2 é destacado. Como posso destacar keyword1 ao mesmo tempo?

    
por Raptor 31.12.2012 / 04:03

2 respostas

11

O comando grep aceita uma opção --color=always , para que você possa usar

grep 'keyword1' file.log --color=always | grep 'keyword2'

Como gertvdijk aponta , este comando pode ser ineficiente, mas será Procure todas as linhas que contenham keyword1 e keyword2. Se você quiser destacá-los em cores diferentes, você pode usar

grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep 'keyword2'

que destacará a palavra-chave2 em azul. A parte mt significa que grep realçará o texto correspondente usando esta Código CSI e 01;34 significa "primeiro plano em negrito em plano de fundo normal".

    
por Daniel H 31.12.2012 / 04:24
2

Experimente expressões regulares reais, em vez de direcionar para outra instância de grep , por exemplo:

grep -E "\<foo\>.*\<bar\>" file

Isso limita as linhas correspondentes nas quais as palavras-chave correspondem apenas a essa ordem, infelizmente. De qualquer forma, o uso de grep em sua pergunta é bastante ineficiente e você deve evitá-lo. A resposta de @DanielH é bem mais direta para o seu caso, provavelmente.

Para uma 'ou' correspondência de palavras-chave, eu uso isso regularmente:

grep -E "(foo|bar)" file
    
por gertvdijk 31.12.2012 / 04:07

Tags