GNU/Linux >> Tutoriales Linux >  >> Linux

Resalte texto similar a grep, pero no filtre texto

Usa acuse de recibo. Revisa su --passthru opción aquí:ack. Tiene el beneficio adicional de permitir expresiones regulares completas de Perl.

$ ack --passthru 'pattern1' file_name

$ command_here | ack --passthru 'pattern1'

También puedes hacerlo usando grep como este:

$ grep --color -E '^|pattern1|pattern2' file_name

$ command_here | grep --color -E '^|pattern1|pattern2'

Esto hará coincidir todas las líneas y resaltará los patrones. El ^ coincide con cada inicio de línea, pero no se imprimirá ni resaltará porque no es un carácter.

(Tenga en cuenta que la mayoría de las configuraciones usarán --color de forma predeterminada. Es posible que no necesite esa bandera).


Puede asegurarse de que todas las líneas coincidan, pero no hay nada que resaltar en las coincidencias irrelevantes

egrep --color 'apple|' test.txt 

Notas:

  • egrep también se puede escribir grep -E
  • --color suele ser predeterminado en la mayoría de las distribuciones
  • Algunas variantes de grep "optimizarán" la coincidencia vacía, por lo que es posible que desee usar "apple|$" en su lugar (consulte:https://stackoverflow.com/a/13979036/939457)

EDITAR:

Esto funciona con grep de OS X Mountain Lion:

grep --color -E 'pattern1|pattern2|$'

Esto es mejor que '^|pattern1|pattern2' porque el ^ parte de la alternancia coincide al principio de la línea mientras que el $ partidos al final de la línea. Algunos motores de expresiones regulares no resaltarán pattern1 o pattern2 porque ^ ya coincidió y el motor está ansioso .

Algo similar ocurre con 'pattern1|pattern2|' porque el motor de expresiones regulares nota que la alternancia vacía al final de la cadena de patrón coincide con el comienzo de la cadena de asunto.

[1]: http://www.regular-expressions.info/engine.html

PRIMERA EDICIÓN:

Terminé usando perl:

perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'

Esto supone que tiene un terminal compatible con ANSI.

RESPUESTA ORIGINAL:

Si estás atascado con un extraño grep , esto podría funcionar:

grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'

Ajuste los números para obtener todas las líneas que desee.

El segundo grep simplemente elimina elementos extraños -- líneas insertadas por el estilo BSD grep en Mac OS X Mountain Lion, incluso cuando el contexto de coincidencias consecutivas se superpone.

Pensé que GNU grep omitió el -- líneas cuando el contexto se superpone, pero ha pasado un tiempo, así que tal vez no recuerdo bien.


Linux
  1. ¿Cómo resaltar una palabra en la salida de "gato"?

  2. ¿Modificar un correo entrante de texto/sin formato a texto/html?

  3. VPS vs VPN:nombres similares, pero funciones completamente diferentes

  4. Cómo encontrar texto específico usando GREP en Linux

  5. Cómo habilitar el color del texto en vi similar a vim en CentOS/RHEL

Comando Grep en Linux (Buscar texto en archivos)

Manipulación de texto con sed y grep

Manipulación de texto en la línea de comando con grep

Cómo extraer direcciones de correo electrónico de un archivo de texto en Linux

Encuentra texto en archivos en Linux usando grep

¿Descomprimir un archivo .gz para obtener un archivo de texto pero obtener un archivo binario?