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 keyword2está resaltado. ¿Cómo puedo keyword1resaltar al mismo tiempo?
El grepcomando acepta una --color=alwaysopció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 mtparte significa que grepresaltará el texto coincidente utilizando este código CSI y 01;34significa "primer plano azul en negrita sobre fondo normal".
grep -R --color=always keyword1 . | grep keyword2debería funcionar. ¿Está redirigiendo la salida nuevamente (por ejemplo, colocando el segundogrepenless -R)? Si es así, también deberá agregar--color=alwaysal segundo.--color=autosería necesario un segundogrep, justo después'keyword2'.--color=alwaysa la respuesta, porque es posible que desee canalizarlolesso 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
grepen 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 engrepla 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).