varias utilizar utiliza uso test solo siguientes regulares regresará que puede parametros palabras palabra líneas los expresiones exacta ejemplos cómo cuál con comiencen comandos comando caracteres buscar bash shell colors grep

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



grep varias palabras (16)

Agregué esto a mis .bash_aliases:

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

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 algo en la misma línea. Es probable que, de todos modos, uses menos, así que prueba esto:

less -p pattern file

Resaltará el patrón y saltará a la primera aparición en el archivo.


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.


Me gustaría recomendar ack, mejor que grep, una herramienta de búsqueda poderosa para programadores .

$ ack --color --passthru --pager="${PAGER:-less -R}" pattern files

$ ack --color --passthru pattern files | less -R

$ export ACK_PAGER_COLOR="${PAGER:-less -R}" $ ack --passthru pattern files

Me encanta porque utiliza de forma predeterminada la búsqueda recursiva de directorios (y es mucho más inteligente que grep -r ), admite expresiones regulares de Perl completas (en lugar de la expresión regex(3) POSIXish regex(3) ) y tiene una pantalla de contexto mucho más agradable cuando se buscan muchos archivos. .


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" ''


Para resaltar patrones mientras se ve el archivo completo, h puede hacer esto.

Además utiliza diferentes colores para diferentes patrones.

cat FILE | h ''PAT1'' ''PAT2'' ...

También puede canalizar la salida de h a less -R para una mejor lectura.

Para grep y usar 1 color para cada patrón, cxpgrep podría ser un buen ajuste.


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.


También puede crear un alias. Agregue esta función en su .bashrc (o .bash_profile en osx)

function grepe { grep --color -E "$1|$" $2 }

Ahora puede usar el alias así: " ifconfig | grepe inet " o " grepe css index.html ".

(PD: no olvide la source ~/.bashrc para volver a cargar Bashrc en la sesión actual)


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.


Yo uso rcg de "Linux Server Hacks", O''Reilly. Es perfecto para lo que quieres y puede resaltar múltiples expresiones, cada una con diferentes colores.

#!/usr/bin/perl -w # # regexp coloured glasses - from Linux Server Hacks from O''Reilly # # eg .rcg "fatal" "BOLD . YELLOW . ON_WHITE" /var/adm/messages # use strict; use Term::ANSIColor qw(:constants); my %target = ( ); while (my $arg = shift) { my $clr = shift; if (($arg =~ /^-/) | !$clr) { print "Usage: rcg [regex] [color] [regex] [color] .../n"; exit(2); } # # Ugly, lazy, pathetic hack here. [Unquote] # $target{$arg} = eval($clr); } my $rst = RESET; while(<>) { foreach my $x (keys(%target)) { s/($x)/$target{$x}$1$rst/g; } print }


otra manera sucia:

grep -A80 -B80 --color FIND_THIS IN_FILE

Hice un

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

en bashrc.