Option de couleur par défaut Grep

11

grep est l'une des commandes les plus utilisées sous Linux. Il me semble que sa fonction de base est de mettre en évidence la chaîne recherchée sur les lignes de sortie. ceci peut être réalisé par l'option --color.

Taper --color à chaque fois est ennuyeux et non productif. Existe-t-il un moyen de changer grep pour qu'il se comporte comme grep --color.

J'ai essayé d'écrire un petit script nommé grepd et l' ai ajouté à ma variable PATH. Mais le script ne fonctionne pas sur le grepd d' entrée . Toutes suggestions s'il vous plaît.

#!/bin/bash
grep --color $1 $2
Srujan Kumar Gulla
la source

Réponses:

21

Ajoutez simplement l'alias suivant au fichier de configuration de votre shell, par exemple .bashrcou .bash_profile(selon celui que vous utilisez, voir ici ):

alias grep='grep --color=auto'

Vous pouvez simplement l'utiliser comme grep.

Il n'est généralement pas nécessaire de créer des scripts lorsque de simples alias de commande font très bien la même chose. En fait, votre script ne fonctionnerait même pas si vous vouliez passer plus d'options à grep. Dans le cas où vous avez besoin d'un petit extrait qui peut traiter des arguments, vous devez utiliser des fonctions .

slhck
la source
9
Ou de manière équivalente, définissez la GREP_OPTIONSvariable d'environnement:export GREP_OPTIONS='--color=always'
Jérôme
Cela n'ajoute pas l'option de couleur si vous utilisez fgrep ou egrep, vous aurez besoin d'alias séparés pour ceux-ci. De plus, @ Jérôme: GREP_OPTIONS est marqué comme obsolète dans la page de manuel de grep.
Thayne
@Thayne uniquement pour GNU grep et pas pour d'autres comme FreeBSD grep. Et pour autant que je sache, cela fait 4 ans que cela a été changé et il est toujours pris en charge. Déprécié ne signifie pas supprimé.
cde
C'est ce que je fais habituellement, mais cela ne fonctionne pas correctement dans certains cas. Par exemple: some_command | xargs grep foone sera pas colorisé car xargs n'utilise pas l'alias.
TM.
2
#!/bin/sh
exec grep --color "$@"

Ceci illustre la manière standard de "boucler" une commande avec un script shell, lorsque la commande ne fonctionne pas tout à fait comme vous le souhaitez.

Les execévite de créer un processus supplémentaire (un pour le script et un pour grep). Vous pouvez le laisser de côté si vous le souhaitez.

Le "$@"est remplacé par tous les arguments du script, quel que soit leur nombre. Il conserve correctement les arguments avec des espaces et d'autres caractères spéciaux pour le shell.

Kenster
la source
Le "exec grep" devrait être "exec / bin / grep"
Berend de Boer
2
@BerenddeBoer Pas vraiment. "exec grep" fonctionnerait très bien. Il n'y a rien de mal à chercher le chemin de grep.
Kenster
-1

essayez de mettre export GREP_COLORS='AUTO'votre ~ / .bashrc - pour moi, cela fonctionne.

de man grep

       --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences
          to display them in color on the terminal.  The colors are defined by the environment variable GREP_COLORS.  The deprecated environment variable GREP_COLOR is still supported, but  its  setting
          does not have priority.  WHEN is never, always, or auto.
mroz
la source
5
GREP_COLORSest l'ensemble des couleurs réelles. Le réglage sur AUTOne doit afficher aucune couleur. export GREP_OPTIONS = '- color = auto' devrait être la réponse.
user137369