Sé cómo agrupar 2 palabras clave con 1 comando, pero solo puedo colorear una de ellas en la salida. Aquí está mi comando:
grep 'keyword1' file.log | grep 'keyword2'
Solo keyword2
está resaltado. ¿Cómo puedo keyword1
resaltar al mismo tiempo?
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 segundogrep
enless -R
)? Si es así, también deberá agregar--color=always
al segundo.--color=auto
sería necesario un segundogrep
, justo después'keyword2'
.--color=always
a la respuesta, porque es posible que desee canalizarloless
o algo también.Pruebe expresiones regulares reales, en lugar de canalizar a otra instancia de
grep
, por ejemplo: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:
fuente
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 engrep
la que realmente sea necesario encadenar s (o en cualquier otro momento en que la salida en color no deba enviarse al terminal, comogrep | less -R
).