286 votes

Obtention de résultats colorés lors de l'utilisation d'un pipe de grep vers less

J'utilise souvent l'option --colour de grep, mais j'utilise également souvent less. Comment puis-je rediriger les résultats de grep vers less tout en préservant la coloration. (Est-ce possible?)

grep "chaîne-de-recherche" -R * --colour | less 

ÉDITION:

Je recherche une solution directe ou toute équivalence à cela.

0 votes

0 votes

Que fait * ? De la page de l'homme de grep : *: L'élément précédent sera trouvé zéro ou plusieurs fois. Mais je ne comprends toujours pas..! @JeremyPowell

1 votes

@Shayan, le '*' dans ce cas est pour les arguments de fichier. Il est traité par le shell qui l'expand en tous les fichiers du répertoire. La chaîne de recherche est encadrée par des guillemets doubles dans l'exemple.

328voto

talonx Points 315

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 tube, il désactive la coloration. La commande suivante :

grep --color=always -R "chaîne de recherche" * | less

Activera toujours la coloration et passera outre la détection automatique, et vous obtiendrez la mise en surbrillance en couleur dans less.

MODIFIER : Bien que l'utilisation uniquement de less fonctionne pour moi, peut-être que des versions plus anciennes requièrent le drapeau -R pour gérer les couleurs, comme l'a suggéré therefromhere.

34voto

Damian Powell Points 315

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 l'a souligné therefromhere

16voto

Dans des cas comme celui-ci, je préfère en fait créer de petits fichiers sh et les placer dans /usr/local/bin.
J'utilise généralement grep de manière récursive sur le pwd, voici donc mon script personnel :

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

Et ensuite je l'ai simplement copié sous /usr/local/bin/g (oui, je l'utilise beaucoup)

2voto

not2qubit Points 1669

Ne pas alias "grep", mieux vaut aliaser "less" qui n'est jamais utilisé par les shells. Dans votre .bashrc, mettez simplement: alias less="less -r".

0voto

Pierre François Points 101

Vous pouvez exécuter

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X