2010-02-24 12 views
103

Hay una pregunta simlar en Preserve ls colouring after grep’ing pero me molesta que si la tubería de salida coloreaste grep en otro grep que la coloración no se conserva.Preserve coloración después de grep tuberías a grep

Como ejemplo grep --color WORD * | grep -v AVOID no impide que el color de la primera salida. Pero para mí ls | grep FILE mantener el color, ¿por qué la diferencia?

+2

Esta pregunta parece ser fuera de tema, ya que es sobre el uso de comandos de Unix, pertenece a http://unix.stackexchange.com – Raptor

Respuesta

116

grep a veces desactiva la salida de color, por ejemplo al escribir en una tubería. Puede anular este comportamiento con grep --color=always

La línea de comandos correcta sería

grep --color=always WORD * | grep -v AVOID 

Esto es bastante detallado, alternativamente, usted puede agregar la línea

alias cgrep="grep --color=always" 

a su .bashrc por ejemplo, y el uso cgrep como grep de color. Al redefinir grep, puede tener problemas con las secuencias de comandos que dependen de la salida específica de grep y no les gusta el código de escape ASCII.

+1

Esta solución sólo funciona bajo ciertas circunstancias afortunadas. Ver la respuesta de andersonvom a continuación. – studog

62

Un consejo:

Al utilizar grep --color=always, las cadenas reales que se pasa a la siguiente tubería será cambiado. Esto puede conducir a la siguiente situación:

$ grep --color=always -e '1' * | grep -ve '12' 
11 
12 
13 

A pesar de que la opción -ve '12' debe excluir la línea media, no va porque no son caracteres de color entre 1 y 2.

+0

no hay solución para grep, ¿verdad? –

+0

Si usa '--color = auto', entonces debe entender el hecho de que lo está conectando en otro lugar y suprimiendo los colores por completo, pero de alguna manera frustra el propósito. Si aún quieres resultados de color, supongo que podrías grep otra vez en la última tubería con '--color'. – andersonvom

+1

En Mac OS X, al menos, colorear en la última tubería como @andersonvom sugiere que no funciona. No estoy seguro por qué; tal vez está coloreando el patrón excluido? '--color = always' funciona, con, supongo, las advertencias indicadas anteriormente. – user766353

3

aunque un poco 'hack-ish', también funciona simplemente para repetir el comando grep al final de su tubería.
grep WORD * | grep -v AVOID | grep WORD