Filtrando la salida coloreada de grep

Estoy en OSX, pero sospecho que esto no hace una gran diferencia para esta pregunta. En my .bash_profile , aliased grep para get salidas de color por defecto:

 alias grep='grep --color=always' 

Normalmente ejecuto búsquedas de contenido dentro de files en mis repositorys de forma similar a:

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

pero a menudo quiero refinar aún más los resultados, por lo general, canalizar con grep -v "colorbar" .

El problema es que el segundo command grep se ejecuta en la salida coloreada y parece que no puede hacer coincidir los patrones de exclusión debido a esto.

Obviamente, podría ejecutar la primera búsqueda sin colors y luego todo funcionaría bien, pero preferiría conservarlos si hay una forma de evitar esto.

La respuesta simple y obvia es:

  1. Cambie su alias para tener --color=auto lugar de always
  2. Transmite tus commands grep al contenido de tu corazón
  3. Use un command grep extra al final de la tubería solo para colorear los resultados que desea colorear, por ejemplo:

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

Sin embargo, esto no coloreará sus nombres de files y files de manera muy agradable.

Otra posible solución es mucho más complicada, pero vale la pena mencionarla: puedes usar pcregrep y una sola expresión pcregrep mucho más elegante para manejar todo tu filtrado en una expresión regular.

elimine el file /etc/profile.d/colorgrep* Con la versión más nueva os linux están forzando un alias para greg / egrep y fgreg elimine estos files y vuelve a la normalidad.