web-dev-qa-db-fra.com

Obtenir des résultats colorés lors de l'utilisation d'un tuyau de grep à moins

J'utilise beaucoup l'option --colour de grep, mais j'utilise aussi souvent moins. Comment puis-je diriger les résultats de grep vers moins tout en préservant la coloration? (Ou est-ce possible?)

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

MODIFIER:

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

236
Jeremy Powell

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

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

Permettra toujours d'activer la coloration et d'ignorer la détection automatique. La couleur sera alors surlignée dans less.

EDIT: Bien que l’utilisation de less ne fonctionne que pour moi, une version plus ancienne nécessite peut-être le drapeau -R pour gérer les couleurs, comme suggéré ici.

264
drrlvn

Vous pouvez mettre ceci dans votre fichier .bashrc:

export GREP_OPTIONS="--color=always"

ou créez un alias comme ceci:

alias grepc="grep --color=always"

et vous devrez utiliser l'option -R pour less, comme indiqué par la suite

27
Dennis Williamson

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 pwd, c'est donc mon script personnel:

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

Et puis je viens de le copier en tant que /usr/local/bin/g (oui, je l’utilise beaucoup)

7
Iazel

Ne pas alias "grep", mais alias "moins" qui n’est jamais utilisé par les shells. Dans votre .bashrc, mettez simplement: alias less="less -r".

1
not2qubit

J'ai besoin de courir

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

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

0
Pierre François