Encuentro que grepla --color=alwaysbandera 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 catun archivo y ver todo el archivo con las coincidencias de patrón resaltadas.
¿Hay alguna manera de decirle a grep que imprima cada línea que se lee independientemente de 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 saber si esto era posible con el estándar grep.

sed. lasedsolución le ofrece múltiples colores a costa de una mayor complejidad (en lugar de unos 30 caracteres, tiene unos 60 caracteres).Respuestas:
Aquí hay algunas formas de hacerlo:
fuente
egrep --color "pattern|" file(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$". De lo contrario, no se resalta el color.Aquí hay algo en la misma línea. Lo más probable es que use menos de todos modos, así que intente esto:
Destacará el patrón y saltará a la primera aparición del mismo en el archivo.
fuente
-:… | less -p pattern --iopción hará que la coincidencia sea insensible como enless -ip pattern file.lessel-Rinterruptor:… | less -Rip introduction -Me gustaría recomendar ack, mejor que grep, una herramienta de búsqueda poderosa para programadores .
$ ack --color --passthru --pager = "$ {PAGER: -less -R}" archivos de patrones$ export ACK_PAGER_COLOR = "$ {PAGER: -less -R}" $ ack --passthru archivos de patronesMe encanta porque el valor predeterminado es la búsqueda recursiva de directorios (y es mucho más inteligente que
grep -r), admite expresiones regulares completas de Perl (en lugar de POSIXishregex(3)) y tiene una visualización de contexto mucho más agradable al buscar muchos archivos.fuente
ackes inteligente, pero a veces demasiado inteligente, y excluía el tipo de archivo en el que estaba el golpe.ack -abuscará todos los tipos de archivos, mientras que aún excluyendo.git/.svn/etc.ackno busque a través de mis imágenes, también lo-ahace demasiado. Agregué--type-set=freemarker=.ftla mi~/.ackrc, para dar un ejemplo.Puedes usar mi
highlightscript desde https://github.com/kepkin/dev-shell-essentialsEs mejor que
grepporque puedas resaltar cada partido con su propio color .fuente
grep, que es una utilidad estándar en máquinas que ejecutan * nix.coloutmenciona en otra respuesta.colout, lo cual es bueno si desea inspeccionar lo que hace.También puedes crear un alias. Agregue esta función en su .bashrc (o .bash_profile en osx)
Ahora puede usar el alias de esta manera: "
ifconfig | grepe inet" o "grepe css index.html".(PD: no olvides
source ~/.bashrcvolver a cargar bashrc en la sesión actual)fuente
--color=alwayslugar de--colorlessinterpretar los códigos de color, useless -R.Utilice el
coloutprograma: http://nojhan.github.io/colout/Está diseñado para agregar resaltados de color a una secuencia de texto. Dado una expresión regular y un color (por ejemplo, "rojo"), reproduce una secuencia de texto con coincidencias resaltadas. p.ej:
Puede encadenar varias invocaciones para agregar múltiples resaltados de colores diferentes:
O puede lograr lo mismo utilizando una expresión regular con N grupos (partes entre paréntesis de la expresión regular), seguida de una lista de N colores separados por comas.
fuente
grep, y ya está expandido en las respuestas,coloutes la mejor solución para el problema que tuvo, lo mejor que sé. Según la filosofía de UNIX, los programas deben escribirse para hacer una cosa bien. Porquegrepestá filtrando flujo de texto. Porquecoloutestá coloreando o resaltando la secuencia de texto.coloutes una herramienta muy útil. Aprenda una vez, úsela en muchas situaciones, en lugar de aprender una herramienta para resaltar archivos de registro, otra para resaltar el resultado de la prueba, etc.Yo uso rcg de "Linux Server Hacks", O'Reilly. Es perfecto para lo que desea y puede resaltar múltiples expresiones, cada una con diferentes colores.
fuente
¡La
-zopción para grep también es bastante hábil!fuente
Agregué esto a mis .bash_aliases:
fuente
Para resaltar patrones mientras ve el archivo completo, h puede hacer esto.
Además, utiliza diferentes colores para diferentes patrones.
También puede canalizar la salida de
haless -Rpara una mejor lectura.Para grep y usar 1 color para cada patrón, cxpgrep podría ser una buena opción .
fuente
Ok, esta es una forma
le dará el recuento de líneas - diga NN, luego puede hacer
fuente
Aquí hay un script de shell que utiliza la función gsub de Awk para reemplazar el texto que está buscando con la secuencia de escape adecuada para mostrarlo en rojo brillante:
Úselo así:
Desafortunadamente, no tiene toda la funcionalidad de grep.
Para obtener más información, puede consultar un artículo " So You Like Color " en Linux Journal
fuente
Otra respuesta mencionó el interruptor grep's -Cn 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 egrep parece demasiado complicado, o cuando estoy en una máquina en la que no he instalado rcg y / o ccze.
Recientemente descubrí
cczecuál es un colorante más potente. Mi única queja es que está orientado a la pantalla (comoless, que nunca uso por ese motivo) a menos que especifique el interruptor -A para la salida "ANSI sin procesar".+1 por la
rcgmención anterior. Sigue siendo mi favorito, ya que es muy sencillo de personalizar en un alias. Algo así suele estar en mi ~ / .bashrc:alias tailc = 'tail -f / my / app / log / file | rcg envía "VERDE NEGRO" recibe el error "CIAN" "ROJO"
fuente
Otra forma sucia:
Hice un
en bashrc.
fuente
Alternativamente, puede usar The Silver Searcher y hacer
fuente
Si desea resaltar varios patrones con diferentes colores, vea este script bash.
Uso básico:
Puede cambiar patrones y colores mientras se ejecuta presionando una tecla y luego ingresar la tecla.
fuente
Yo uso el siguiente comando para un propósito similar:
grep -C 100 searchtext fileEsto dirá grep para imprimir 100 * 2 líneas de contexto, antes y después del texto de búsqueda resaltado.
fuente
Aquí está mi enfoque , inspirado en la solución de @ kepkin:
Esto acepta múltiples argumentos (pero no le permite personalizar los colores). Ejemplo:
fuente
La opción
-C999hará el truco en ausencia de una opción para mostrar todas las líneas de contexto. La mayoría de las otras variantes de grep también admiten esto. Sin embargo: 1) no se produce salida cuando no se encuentra ninguna coincidencia y 2) esta opción tiene un impacto negativo en la eficiencia de grep: cuando el-Cvalor es grande, es posible que muchas líneas deban almacenarse temporalmente en la memoria para que grep determine qué líneas de contexto para mostrar cuando se produce una coincidencia. Tenga en cuenta que las implementaciones de grep no cargan archivos de entrada, sino que leen algunas líneas o usan una ventana deslizante sobre la entrada. La "parte anterior" del contexto debe mantenerse en una ventana (memoria) para generar las líneas de contexto "anterior" más adelante cuando se encuentra una coincidencia.Un patrón como
^|PATTERNoPATTERN|$cualquier subpatrón de coincidencia vacía para ese asunto[^ -~]?|PATTERNes un buen truco. Sin embargo, 1) estos patrones no muestran líneas no coincidentes resaltadas como contexto y 2) esto no se puede usar en combinación con algunas otras opciones grep, como-Fy-wpor ejemplo.Así que ninguno de estos enfoques me satisface. Estoy usando ugrep y grep mejorado con la opción
-yde mostrar de manera eficiente todos los resultados no coincidentes como líneas de contexto resaltadas en color. Otras herramientas similares a grep como ag y ripgrep también ofrecen una opción de transferencia. Pero ugrep es compatible con GNU / BSD grep y ofrece un superconjunto de opciones grep como-yy-Q. Por ejemplo, esto es lo que-ymuestra la opción cuando se combina con-Q(interfaz de usuario de consulta interactiva para ingresar patrones):fuente