Eu sei como grep 2 palavras-chave usando 1 comando, mas só consigo colorir uma delas na saída. Aqui está o meu comando:
grep 'keyword1' file.log | grep 'keyword2'
Somente keyword2
é destacado. Como posso keyword1
destacar ao mesmo tempo?
O grep
comando aceita uma --color=always
opção, para que você possa usar
grep 'keyword1' file.log --color=always | grep 'keyword2'
Como gertvdijk aponta , esse comando pode ser ineficiente, mas procurará todas as linhas que contenham palavra-chave1 e palavra-chave2 . Se você quiser destacá-los em cores diferentes, poderá usar
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
que destacará a palavra-chave2 em azul. A mt
parte significa que grep
destacará o texto correspondente usando esse código CSI e 01;34
significa "primeiro plano em negrito azul em fundo normal".
grep -R --color=always keyword1 . | grep keyword2
deve funcionar. Você está redirecionando a saída novamente (como canalizando a segundagrep
emless -R
)? Nesse caso, você precisará adicionar--color=always
ao segundo também.--color=auto
seria necessário para o segundogrep
, logo após'keyword2'
.--color=always
à resposta, porque você pode querer canalizá-laless
ou algo assim também.Tente expressões regulares reais, em vez de canalizar para outra instância de
grep
, por exemplo:Isso limita as linhas correspondentes nas quais essas palavras-chave correspondem somente nesta ordem, infelizmente. De qualquer forma, o uso de
grep
na sua pergunta é bastante ineficiente e você deve evitá-lo. A resposta de @DanielH é bem mais direta para o seu caso, provavelmente.Para uma correspondência "ou" de palavras-chave, eu uso isso regularmente:
fonte
foo.*bar|bar.*foo
ou se isso é necessário para este caso (que parece ser um arquivo de log que provavelmente teria um pedido padrão para as palavras-chave). Eu adicionei minha resposta antes que você atualize a sua, mas continuarei assim, caso haja uma situação em quegrep
s realmente sejam encadeados (ou qualquer outra saída colorida não deve ser enviada ao terminal, comogrep | less -R
).