Respuestas:
El grep
comando acepta una --color=always
opción, por lo que puede usar
grep 'keyword1' file.log --color=always | grep 'keyword2'
Como señala gertvdijk , este comando puede ser ineficiente, pero buscará todas las líneas que contengan palabra clave1 y palabra clave2. Si desea resaltarlos en diferentes colores, puede usar
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
que resaltará la palabra clave2 en azul. La mt
parte significa que grep
resaltará el texto coincidente utilizando este código CSI y 01;34
significa "primer plano azul en negrita sobre fondo normal".
grep -R --color=always keyword1 . | grep keyword2
debería funcionar. ¿Está redirigiendo la salida nuevamente (por ejemplo, colocando el segundo grep
en less -R
)? Si es así, también deberá agregar --color=always
al segundo.
--color=auto
sería necesario un segundo grep
, justo después 'keyword2'
.
--color=always
a la respuesta, porque es posible que desee canalizarlo less
o algo también.
Pruebe expresiones regulares reales, en lugar de canalizar a otra instancia de grep
, por ejemplo:
grep -E "\<foo\>.*\<bar\>" file
Esto limita a las líneas coincidentes en las que las palabras clave coinciden solo en este orden, lamentablemente. De todos modos, el uso de grep
en su pregunta es bastante ineficiente y debe evitarlo. La respuesta de @DanielH es mucho más sencilla para su caso, probablemente.
Para una "o" coincidencia de palabras clave, uso esto regularmente:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
, o si eso es incluso necesario para este caso (que parece ser un archivo de registro que probablemente tendría un orden estándar para las palabras clave). Agregué mi respuesta antes de que actualizara la suya, pero la mantendré disponible en caso de que haya una situación en grep
la que realmente sea necesario encadenar s (o en cualquier otro momento en que la salida en color no deba enviarse al terminal, como grep | less -R
).