bash varias Colorized grep-viendo el archivo completo con coincidencias resaltadas




¿cuál de los siguientes comandos regresará solo líneas que comiencen con test? (11)

Agregué esto a mis .bash_aliases:

highlight() {
  grep --color -E "$1|\$"
}

https://code.i-harness.com

Me parece que la grep --color=always grep es tremendamente útil. Sin embargo, grep solo imprime líneas con coincidencias (a menos que solicite líneas de contexto). Dado que cada línea que imprime tiene una coincidencia, el resaltado no agrega tanta capacidad como podría.

Realmente me gustaría cat un archivo y ver el archivo completo con las coincidencias de patrones resaltadas.

¿Hay alguna manera en que pueda decirle a grep que imprima cada línea que se lee sin importar si hay una coincidencia? Sé que podría escribir un script para ejecutar grep en cada línea de un archivo, pero tenía curiosidad por si esto era posible con el grep estándar.



Aquí hay algunas maneras de hacerlo:

grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file

Aquí hay un script de shell que usa la función gsub de Awk para reemplazar el texto que está buscando con la secuencia de escape adecuada para mostrarlo en rojo brillante:

#! /bin/bash
awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2

Úsalo así:

$ ./cgrep pattern [file]

Desafortunadamente, no tiene toda la funcionalidad de grep.

Para obtener más información, puede consultar el artículo " So You Like Color " en Linux Journal.


Ok, esta es una forma,

wc -l filename

le dará el recuento de líneas - diga NN, entonces usted puede hacer

grep -C NN --color=always filename

Otra respuesta mencionó el interruptor-gn de grep que incluye n líneas de contexto. A veces hago esto con n = 99 como una forma rápida y sucia de obtener [al menos] una pantalla llena de contexto cuando el patrón de egrep parece demasiado delicado, o cuando estoy en una máquina en la que no he instalado rcg y / o ccze.

Recientemente descubrí ccze que es un colorizador más potente. Mi única queja es que está orientado a la pantalla (como less , que nunca uso por esa razón) a menos que especifique el interruptor -A para la salida "ANSI sin procesar".

+1 para la mención rcg anterior. Sigue siendo mi favorito ya que es tan sencillo de personalizar en un alias. Algo como esto suele estar en mi ~ / .bashrc:

alias tailc = 'tail -f / my / app / log / file | rcg enviar "BOLD GREEN" recibe "CYAN" error "RED" '


Puede usar mi script de highlight desde https://github.com/kepkin/dev-shell-essentials

Es mejor que grep porque puedes resaltar cada partido con su propio color .

$ command_here | highlight green "input" | highlight red "output"


Si desea resaltar varios patrones con diferentes colores, consulte this script de bash.

Uso básico:

echo warn error debug info 10 nil | colog

Puede cambiar los patrones y los colores mientras se ejecuta presionando una tecla y luego la tecla Intro.


Usa el programa colout : http://nojhan.github.io/colout/

Está diseñado para agregar resaltes de color a una secuencia de texto. Dada una expresión regular y un color (por ejemplo, "rojo"), reproduce un flujo de texto con coincidencias resaltadas. p.ej:

# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile

Puede encadenar múltiples invocaciones para agregar múltiples resaltes de colores diferentes:

tail -f /var/log/nginx/access.log | \
    colout ' 5\d\d ' red | \
    colout ' 4\d\d ' yellow | \
    colout ' 3\d\d ' cyan | \
    colout ' 2\d\d ' green

O puede lograr lo mismo utilizando una expresión regular con grupos N (partes entre paréntesis de la expresión regular), seguida de una lista de N colores separados por comas.

vagrant status | \
    colout \
        '\''(^.+  running)|(^.+suspended)|(^.+not running)'\'' \
        green,yellow,red

Yo uso el siguiente comando para propósitos similares:

grep -C 100 searchtext file

Esto dirá grep para imprimir 100 * 2 líneas de contexto, antes y después del texto de búsqueda resaltado.


otra manera sucia:

grep -A80 -B80 --color FIND_THIS IN_FILE

Hice un

alias grepa='grep -A80 -B80 --color'

en bashrc.





grep