en bash, si quiero ejecutar un comando y solo mostrar líneas de salida que coinciden con un cierto patrón, puedo canalizarlo grep
, como
archivo de prueba
hello
there
my
friends
mando
$ cat testfile | grep 'hello'
hello #this will be highlightd
esto resaltará la coincidencia de búsqueda y mostrará la línea completa en la que se encuentra. Puedo usar -A
y -B
para mostrar líneas antes y después de esa línea. Mi pregunta es si es posible ejecutar el comando y mostrar todos los resultados de forma normal, pero para resaltar las coincidencias de búsqueda como lo haría grep. entonces mi salida sería
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
fuente
fuente
Respuestas:
Para usar un Color GREP para resaltar solo patrones coincidentes pero no cambiar la salida de otra manera:
El primer patrón coincidirá con todas las líneas (se imprimirán todas las líneas), el segundo patrón (y los siguientes patrones) harán que el texto coincidente se destaque en color.
Dado que el primer patrón coincide con todas las líneas pero no con un carácter imprimible, no agrega ningún resaltado de color, por lo que no compite / interfiere con la legibilidad del texto resaltado.
fuente
kubectl apply -k . | grep --color=always -e "^" -e "configured"
en zsh"^"
debe ser el segundo).Agregue la opción
-z
a su comando grep de GNU:o más corto
fuente
grep --color "hello\|$" file
De manera similar a la respuesta anterior, puede capturar todos los
$
extremos de las líneas:-E
(o--extended-regexp
) significa que se debe escapar con caracteres especiales\
. Al usarlo,|
se tratará como una condición regex "OR".Grep
|$
también capturará e imprimirá todas las líneas que tengan un final, pero como $ es un carácter oculto, no se puede resaltar.Actualizar:
Si desea imprimir toda la salida, pero también devolver el código de salida , ya sea que se haya encontrado una coincidencia o no, puede usar el comando perl:
Si prefiere sed : aquí hay un ejemplo de cómo resaltar todas las coincidencias + devolver el código de salida si no se encuentra ninguna coincidencia: https://askubuntu.com/a/1200851/670392
fuente
Este funciona con GNU grep, así como con grep en FreeBSD:
Coincide con el texto "hola" o (
\|
) la cadena nula no imprimible al final de cada línea ($
). Es por eso que cada línea se imprime pero solo se resalta "hola".Es probable que ya haya
--color=auto
configurado en su shell. Entonces lo más probable es que no necesite especificar--color=always
:También puede usar una versión más simple usando
egrep
(con expresiones regulares extendidas), donde|
para la expresión "o" no es necesario escapar:fuente
Agregando a la respuesta superior de arriba. La función resaltar {} mencionada en los comentarios solo funciona cuando se ingresan datos. El siguiente alias, aunque no es perfecto, es más útil:
Esto funciona con comandos como:
fuente