Pregunta Menos y Grep: obteniendo resultados coloreados al usar un tubo de grep a menos


Uso la opción --colour de grep mucho, pero a menudo uso menos también. ¿Cómo puedo pipetear los resultados de grep a menos y aún preservar el color? (¿O es posible?)

grep "search-string" -R * --colour | less 

EDITAR:

Estoy buscando una solución directa o algo equivalente a esto.


211


origen


posible duplicado de Obtener colores en el comando 'menos' - Ciro Santilli 新疆改造中心 六四事件 法轮功


Respuestas:


Cuando simplemente corres grep --color eso implica grep --color=auto que detecta si la salida es un terminal y si es así habilita los colores. Sin embargo, cuando detecta una tubería, desactiva el color. El siguiente comando:

grep --color=always -R "search string" * | less

Siempre habilitará el color y anulará la detección automática, y obtendrá el resaltado de color en less.

EDITAR: Aunque usando solo less funciona para mí, tal vez la versión más antigua requiere el -R bandera para manejar los colores, como de allí se sugiere.


243



Tienes que usar less -R para que la codificación de color sea interpretada de forma menos correcta - therefromhere
Me funcionó solo less, puede ser dependiente de la versión. - drrlvn
Un apéndice (con suerte) útil: necesitaba excluir algunas coincidencias pero mantener el color, así que en realidad terminé con grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, que satisfizo mis necesidades perfectamente (¡Gracias de nuevo!) - Owen Blacker
No puedo creer que hayan implementado la función de manejo del color en less y por lo tanto se perdió la oportunidad de tener un especial colorless herramienta. ¡Solo por el nombre debería haberse hecho! Probablemente debería escribir un parche que invoca -R automáticamente cuando el binario se ejecuta como colorless. - Christian
@OwenBlacker Puede que no sea un alias. Es posible que usted tenga $LESS colocado con -R. - greyfade


Puedes poner esto en tu .bashrc archivo:

export GREP_OPTIONS="--color=always"

o crea un alias como este:

alias grepc="grep --color=always"

y necesitarás usar el -R opción para less, como se señala aquí


27



¡Advertencia !: GREP_OPTIONS = "- color = always" puede romperse muchos scripts que usan grep (o (e | f) grep). - mctylr
Sí, es mejor que solo alias grep. Siempre puedes obtener puro grep con GREP, o anular el --color opción de forma manual. - asmeurer
Esto no funciona para mí, alias sí funciona. - saeedgnu


En el caso de este tipo, prefiero crear pequeños archivos sh y ponerlos en /usr/local/bin.
Usualmente uso grep de manera recursiva en el pwd, entonces esa es mi escritura personal:

#!/bin/sh
grep --color=always -r "$@" . | less -R

Y luego acabo de copiarlo como /usr/local/bin/g (Sí, lo uso mucho)


4



¿Por qué no usar funciones de shell para este tipo de cosas? g() { grep --color=always -r "$@" . | less -R } funciona de manera idéntica y probablemente dará (minuciosamente) un mejor rendimiento. - 00dani


No alias "grep", mejor alias "less" que nunca es usado por shells. En tus .bashrc sólo hay que poner: alias less="less -r".


0



No del todo bien. Uno necesita usar ambos  grep --color=always y less -R. Tenga en cuenta que grep solo sabe que está siendo canalizado en algún otro proceso y el --color=auto La opción usa únicamente esta información para decidir si se mostrarán colores o no. - brandizzi
Tenga en cuenta que less opción -r es diferente de -R. Probablemente -R Es más seguro. - Craig McQueen
Entonces, ¿por qué votar mi solución? El OP específicamente pide less con el ejemplo que ya usa la opción `--color '. - not2qubit
Un alias es probablemente indeseable aquí. less admite una $LESS Variable ambiental. Entonces, en lugar de un alias, export LESS='-R' podría ser preferible - greyfade


Necesito correr

grep --color=always -R "search string" * | less - r

con el -r bandera después Menos, para que esto funcione


0