Encuentro que grep
la --color=always
bandera 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 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
. lased
solució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 -
-i
opción hará que la coincidencia sea insensible como enless -ip pattern file
.less
el-R
interruptor:… | less -Rip introduction -
Me gustaría recomendar ack, mejor que grep, una herramienta de búsqueda poderosa para programadores .
Me 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
ack
es inteligente, pero a veces demasiado inteligente, y excluía el tipo de archivo en el que estaba el golpe.ack -a
buscará todos los tipos de archivos, mientras que aún excluyendo.git/
.svn/
etc.ack
no busque a través de mis imágenes, también lo-a
hace demasiado. Agregué--type-set=freemarker=.ftl
a mi~/.ackrc
, para dar un ejemplo.Puedes usar mi
highlight
script desde https://github.com/kepkin/dev-shell-essentialsEs mejor que
grep
porque puedas resaltar cada partido con su propio color .fuente
grep
, que es una utilidad estándar en máquinas que ejecutan * nix.colout
menciona 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 ~/.bashrc
volver a cargar bashrc en la sesión actual)fuente
--color=always
lugar de--color
less
interpretar los códigos de color, useless -R
.Utilice el
colout
programa: 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,colout
es 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. Porquegrep
está filtrando flujo de texto. Porquecolout
está coloreando o resaltando la secuencia de texto.colout
es 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
-z
opció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
h
aless -R
para 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í
ccze
cuá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
rcg
menció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 file
Esto 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
-C999
hará 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-C
valor 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
^|PATTERN
oPATTERN|$
cualquier subpatrón de coincidencia vacía para ese asunto[^ -~]?|PATTERN
es 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-F
y-w
por ejemplo.Así que ninguno de estos enfoques me satisface. Estoy usando ugrep y grep mejorado con la opción
-y
de 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-y
y-Q
. Por ejemplo, esto es lo que-y
muestra la opción cuando se combina con-Q
(interfaz de usuario de consulta interactiva para ingresar patrones):fuente