Necesito salida grep con contexto, en color y líneas en blanco como separador de grupo. En esta pregunta , aprendí a definir la costumbre group-separator
, y he construido mi comando grep así:
grep --group-separator="" --color=always -A5
pero el separador de grupo en realidad no está vacío, sino que aún contiene el código de color (es decir [[36m[[K[[m[[K
). Esto es porque estoy usando --color=always
. Pero necesito color en mi comando grep, y necesito un separador para que sea una línea en blanco (para un procesamiento posterior)
¿Cómo puedo combinar estas dos condiciones?
--color=always
la coincidencia se imprimirá con color, y si tiene el--group-separator=""
conjunto en la cadena vacía, obtendrá una línea en blanco después de su grupo coincidente. Por favor, intente nuevamente dejando la--group-separator=""
cadena vacía, no un escape de color específico, y luego explique qué no funciona.od -c
para ver los caracteres ocultos que aparecen en las líneas en blanco.od
.Respuestas:
Si usa la
GREP_COLORS
variable de entorno, puede controlar colores específicos para cada tipo de coincidencia.man grep
explica el uso de la variable.El siguiente comando imprimirá una coincidencia de color, pero nada en la línea que separa el grupo, solo una línea en blanco. Canalizado
od
, verá el color escapar antes y después del partido, pero solo\n\n
en la separación del grupo.Desarmar el
se
componente suprimirá la impresión de color en el separador de grupo.Como mi ejemplo anterior utilizó todos los valores predeterminados para
GREP_COLORS
lo siguiente, también funcionará.Si no está utilizando un
bash
shell similar, es posible que deba exportarGREP_COLORS
primero.fuente
Personalmente, hago eso usando Perl, no
grep
. Tengo un pequeño script que resaltará un patrón dado en color:Si guarda eso en su ruta como
color
, puede obtener el resultado deseado ejecutandoDe esa manera, el script está coloreando las coincidencias para usted y puede decirle que
grep
no use colores y evite este problema.fuente