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 escribirgrep -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.