Filtrando a saída colorida do grep

6

Estou no OSX, mas suspeito que isso não faça uma grande diferença para essa questão. No meu .bash_profile , eu aliastei grep para obter saídas coloridas por padrão:

alias grep='grep --color=always'

Eu geralmente executo buscas por conteúdo dentro de arquivos em meus repositórios de maneira similar a:

grep --include=*.cpp -Ern . -e "(foo|bar)"

mas muitas vezes quero refinar ainda mais os resultados, normalmente falando com grep -v "colorbar" .

O problema é que o segundo comando grep é executado na saída colorida e não parece ser capaz de corresponder aos padrões de exclusão por causa disso.

Obviamente eu poderia executar a primeira pesquisa sem cores e então tudo funcionaria bem, mas eu preferiria mantê-las se houvesse uma maneira de contornar isso?

    
por Sheljohn 01.04.2016 / 19:46

2 respostas

3

A resposta simples e óbvia é:

  1. Altere seu alias para ter --color=auto em vez de always
  2. Canalize seus comandos do grep para o conteúdo do seu coração
  3. Use um comando grep extra no final do pipeline apenas para colorir os resultados que você deseja colorir, por exemplo:

    grep --include=*.cpp -Ern . -e "(foo|bar)" | grep -v colorbar | grep -E -e "(foo|bar)"
    

Isso não irá colorir seus nomes de arquivos e números de arquivos tão bem, no entanto.

Outra possível solução é muito mais complicada, mas ainda vale a pena mencionar: você pode usar pcregrep e um único regex muito mais sofisticado para lidar com toda a sua filtragem em um regex.

    
por 01.04.2016 / 20:43
-1

remova o arquivo /etc/profile.d/colorgrep* Com a versão mais nova do linux eles estão forçando um alias para greg / egrep e o fgreg remove esses arquivos e volta ao normal.

    
por 12.01.2017 / 19:07

Tags