Question Less and Grep: Obtenir des résultats colorés en utilisant un tube de grep à moins


J'utilise beaucoup l'option --colour de grep, mais j'utilise souvent moins. Comment puis-je rendre les résultats de grep inférieurs et conserver la couleur? (Ou est-ce possible?)

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

MODIFIER:

Je cherche une solution directe ou quelque chose d'équivalent à cela.


211
2017-09-04 21:46


origine


duplicata possible de Obtenir des couleurs dans la commande «moins» - Ciro Santilli 新疆改造中心 六四事件 法轮功


Réponses:


Lorsque vous courez simplement grep --color ça implique grep --color=auto qui détecte si la sortie est un terminal et, le cas échéant, active les couleurs. Cependant, quand il détecte un tuyau, il désactive la coloration. La commande suivante:

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

Permettra toujours de colorer et de remplacer la détection automatique, et vous obtiendrez la couleur en surbrillance dans less.

MODIFIER: Bien que n'utilisant que less fonctionne pour moi, peut-être une version plus ancienne nécessite la -R drapeau pour gérer les couleurs, comme il est suggéré ici.


243
2017-09-04 22:35



Vous devez utiliser less -R pour que le codage des couleurs soit interprété de manière moins correcte - therefromhere
Cela a fonctionné pour moi avec juste less, cela peut dépendre de la version. - drrlvn
Un addendum (si tout va bien) utile: je devais exclure certains matches mais conserver la coloration, donc je me suis retrouvé avec grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, qui répondait parfaitement à mes besoins. (Merci encore!) - Owen Blacker
Je ne peux pas croire qu'ils viennent de mettre en œuvre la fonctionnalité de gestion des couleurs dans less et donc manqué la chance d'avoir un spécial colorless outil. Pour le seul nom, cela aurait dû être fait! Je devrais probablement écrire un patch qui appelle -R automatiquement quand le binaire est exécuté comme colorless. - Christian
@OwenBlacker Ce n'est peut-être pas un alias. Vous pourriez avoir $LESS Fixé avec -R. - greyfade


Vous pouvez mettre cela dans votre .bashrc fichier:

export GREP_OPTIONS="--color=always"

ou créez un alias comme celui-ci:

alias grepc="grep --color=always"

et vous devrez utiliser le -R option pour less, comme souligné par là


27
2017-09-05 10:46



Attention!: GREP_OPTIONS = "- color = always" peut casser beaucoup les scripts qui utilisent grep (ou (e | f) grep). - mctylr
Ouais, mieux vaut juste alias grep. Vous pouvez toujours être pur grep avec GREP, ou remplacer le --color option manuellement. - asmeurer
Cela ne fonctionne pas pour moi, même si l'alias fonctionne. - saeedgnu


Dans ce cas, je préfère créer de petits fichiers sh et les mettre sur /usr/local/bin.
J'utilise habituellement grep de manière récursive sur le pwd, donc c'est mon script personnel:

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

Et puis je viens de le copier comme /usr/local/bin/g (oui, je l'utilise beaucoup)


4
2017-09-30 21:48



Pourquoi ne pas simplement utiliser les fonctions shell pour ce genre de chose? g() { grep --color=always -r "$@" . | less -R } fonctionne de manière identique et donnera probablement (minutieusement) une meilleure performance. - 00dani


Ne pas alias "grep", mieux vaut alias "less" qui n'est jamais utilisé par les shells. Dans ton .bashrc il suffit de mettre: alias less="less -r".


0
2018-01-20 10:28



Pas tout à fait juste. Il faut utiliser tous les deux  grep --color=always et less -R. Notez que grep sait seulement qu’il est transféré dans un autre processus et que --color=auto L'option utilise uniquement cette information pour décider si les couleurs seront imprimées ou non. - brandizzi
Notez que less option -r est différent de -R. Probablement -R est plus sûr - Craig McQueen
Alors, pourquoi choisir ma solution? Le PO demande spécifiquement less avec l'exemple utilisant déjà l'option --color. - not2qubit
Un alias est probablement indésirable ici. less prend en charge un $LESS variable d'environnement. Donc, au lieu d'un alias, export LESS='-R' pourrait être préférable. - greyfade


J'ai besoin de courir

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

avec le -r drapeau après Moins, pour que cela fonctionne.


0
2018-01-18 10:51