Estou no OSX, mas suspeito que isso não faz grande diferença para esta pergunta. No meu .bash_profile
, fiz um alias grep
para obter saídas coloridas por padrão:
alias grep='grep --color=always'
Normalmente, procuro conteúdo em arquivos nos meus repositórios de maneiras semelhantes a:
grep --include=*.cpp -Ern . -e "(foo|bar)"
mas muitas vezes eu quero refinar ainda mais os resultados, normalmente com a palavra grep -v "colorbar"
.
O problema é que o segundo grep
comando é executado na saída colorida e não parece capaz de corresponder aos padrões de exclusão por causa disso.
Obviamente, eu poderia executar a primeira pesquisa sem cores e tudo funcionaria bem, mas eu preferiria mantê-las se houver uma maneira de contornar isso?
grep --include=*.cpp -Ern . -e "(foo|bar)" | sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | grep -v "colorbar"
e preserva as cores também! :) Devo fechar o OP então?Respostas:
A resposta simples e óbvia é:
--color=auto
vez dealways
Use um comando grep extra no final do pipeline apenas para colorir os resultados que você deseja colorir, por exemplo:
No entanto, isso não colorirá seus nomes de arquivos e números de arquivos tão bem.
Outra solução possível é muito mais complicada, mas ainda vale a pena mencionar: você pode usar
pcregrep
um único regex muito mais sofisticado para lidar com toda a sua filtragem em um regex.fonte
-v
teste primeiro , portanto, seria necessário apenas doisgrep
comandos no total. Há outra consideração sobre osgrep
comandos de encadeamento que você pode não considerar: os nomes dos arquivos se tornam parte do texto examinado pelos comandos grep posteriores. Possíveis erros lógicos.remova o arquivo /etc/profile.d/colorgrep* Com a versão mais recente do linux, eles estão forçando um apelido para greg / egrep e fgreg, remova esses arquivos e volte ao normal.
fonte
grep
chamadas? Eu também recomendaria não excluir arquivos em/etc
que um gerenciador de pacotes tenha instalado.