2009-12-02 13 views
9

Necesito grep un directorio completo para una cadena y obtengo unos 50 resultados. Me gustaría colorear cada segunda línea, ya sea el color del texto o el color de fondo. Lo mejor sería una secuencia de comandos a la que pueda canalizar la salida de cualquier comando, y para que escuche el mismo resultado (aunque esté coloreado).Manera simple de colorear líneas de salida alternativas en bash

Respuesta

13

No es muy bonita, pero no el truco:

(guardar esta a foo.bash y hacer grep whatever wherever | ./foo.bash)

#!/bin/bash 
while read line 
do 
    echo -e "\e[1;31m$line" 
    read line 
    echo -e "\e[1;32m$line" 
done 
echo -en "\e[0m" 

Aquí puede encontrar el list of color codes in bash.

+1

muy ordenado, también se puede utilizar como una función para evitar una segunda secuencia de comandos. –

+3

Me gusta esto, pero se olvidó de restablecer después: echo -en '\ e [0m'; – naught101

+0

@ naught101 buen punto, corregido ahora. – Kimvais

4

Perl está instalado en muchos sistemas. Usted podría tener que alternan para usted:

grep -r whatever somedir/ | perl -pe '$_ = "\033[1;29m$_\033[0m" if($. % 2)' 

En Perl $. puede ser sustituido por $INPUT_LINE_NUMBER si lo prefiere legibilidad.

2

y aquí es lo mismo en python;

import sys 
for line_number,line in enumerate(sys.stdin.readlines()): 
    print '%s[1;3%dm%s%s[0m' % (chr(27),(line_number % 2+1),line,chr(27)), 
2

¿Debo presumir líneas envueltas? Este script de shell utiliza un color de fondo de la paleta 256 color, para no interferir con otros resaltados que grep --color podría hacer.

#!/bin/sh 
c=0 
while read line; do 
    [ $(($c%2)) -eq 1 ] && printf "\033[48;5;60m" 
    printf "%s\033[0m\n" "$line" 
    c=$(($c+1)) 
done 

Esto tiene la advertencia de que las barras invertidas etc., dentro de la línea serán destrozados, así tratar esto como pseudo código para la reimplementación

+0

Hah , si hubiera sabido sobre color, probablemente no habría necesitado esto, pero ambos son buenos. Gracias por la buena solución. – naught101