Sortie de commande Color Linux

Par exemple, je voudrais colorer la sortie de la commande de locate pour la distinguer facilement de l’autre texte du terminal.

Cela devrait fonctionner comme ceci:

 locate -bir pdf | some_command_to_color_the_result 

La coloration ne doit pas être limitée à la seule commande de locate : j’ai besoin d’une solution générique qui colore le texte à l’aide de pipelines, par exemple en lui fournissant des résultats de grep ou de cat .

S’il n’y a pas de commande Linux intégrée, les astuces pour en créer une sont appréciées.

 norm="$(printf '\033[0m')" #returns to "normal" bold="$(printf '\033[0;1m')" #set bold red="$(printf '\033[0;31m')" #set red boldred="$(printf '\033[0;1;31m')" #set bold, and set red. somecommand | sed -e "s/someregexp/${boldred}&${norm}/g" # will color any occurence of someregexp in Bold red printf "%s" "$red" ; locate something ; printf "%s" "$norm" # will color output of locate something in red #I (ab)use printf "%s" "something", as it's more portable than echo,and easy to modify 

Il existe de nombreuses autres manières (créer une fonction / un script capable de coloriser une expression rationnelle, par exemple, puis: somecommand | colorize -c green 'foo.*bar' 'other' )

Vous pouvez utiliser des séquences d’échappement pour modifier la couleur de la police de n’importe quelle sortie dans le shell bash. Voici quelques codes de couleur dont vous aurez besoin:

 BLACK="\033[30m" RED="\033[31m" GREEN="\033[32m" YELLOW="\033[33m" BLUE="\033[34m" PINK="\033[35m" CYAN="\033[36m" WHITE="\033[37m" NORMAL="\033[0;39m" 

Une fois ceux-ci définis, vous pouvez les utiliser dans les commandes d’écho normales. Par exemple:

 echo -e $GREEN this text is green $NORMAL and this is normal 

Notez que le -e n’est pas toujours nécessaire, mais sur certains systèmes d’exploitation (y compris osx) est nécessaire pour activer les séquences d’échappement.

Étant donné ces définitions, vous pouvez créer des scripts et des tuyaux pour colorer les résultats des autres commandes. Voici un exemple complet que j’utilise pour colorer le résultat de svn up :

 #!/bin/bash BLACK="\033[30m" RED="\033[31m" GREEN="\033[32m" YELLOW="\033[33m" BLUE="\033[34m" PINK="\033[35m" CYAN="\033[36m" WHITE="\033[37m" NORMAL="\033[0;39m" TMPFILE=.cvsup.tmp svn up > $TMPFILE svn status >> $TMPFILE printf $YELLOW grep -e ^"\? " -e ^"I " $TMPFILE printf $GREEN grep -e ^"R " -e ^"U " -e ^"G " $TMPFILE printf $BLUE grep -e ^"M " -e ^"E " $TMPFILE printf $RED grep -e ^"C " -e ^"! " -e ^"X " -e ^"~ " $TMPFILE printf $PINK grep ^"R " $TMPFILE printf $PINK grep ^"D " $TMPFILE printf $CYAN grep ^"A " $TMPFILE printf $NORMAL rm $TMPFILE 

Vous pouvez également regarder le tput .

Comme l’a suggéré Jonathan Leffler, un commentaire a été publié en réponse à une question:

grep --color fournira la couleur

Le suivant a répondu à ma question:

1- Je crée un alias dans mon .bashrc

 alias color='grep --color .' 

2- Ensuite, chaque fois que je veux colorer la sortie de texte du pipeline, j’utilise un alias de couleur comme:

 locate -bir pdf | color 

Cela colorera la sortie en rouge

Il existe un moyen bien meilleur pour obtenir une coloration personnalisable:

Coloriez le

Vous pouvez l’utiliser comme indiqué dans d’autres réponses via some_command | colorit some_command | colorit mais il est bien configurable sur le .coloritrc . Dans le mien j’ai des trucs comme

 dnl Define some useful color variables define(`red', `1') define(`green', `2') define(`magenta', `5') dnl dnl Mark macro arguments: regexp foreground-color [background-color] dnl define(`mark', ``mark "$1"'' `ifelse(`$#', `3', ``"\033[3$2;4$3m"'', ``"\033[3$2m"'')' `"\033[m"') dnl divert mark(`warning', magenta) mark(`Warning', magenta) mark(`Traceback', magenta) mark(`Error', red) mark(`FAIL', red) mark(`ERROR', red) mark(`XFAIL', green) mark(`ok', green) mark(`OK', green) mark(`PASS', green) 

et l’utiliser tout le temps pour colorer le résultat du compilateur et autres choses similaires. Voir mon .coloritrc pour plus.

Je préfère utiliser l’utilitaire mettre en évidence:

 highlight -O xterm256 -S sh 

-S sh signifie ici que l’entrée est une syntaxe de script shell.

Plus d’infos: http://www.andre-simon.de/

Je l’ai défini comme un alias via ~ / .bashrc: entrer la description de l'image ici

entrer la description de l'image ici

Je pense que la commande hl disponible sur git hub pourrait vous aider:
Jetez un coup d’oeil à http://www.flashnux.com/notes/page_000022_US.html

Vous devriez jeter un oeil à la commande hl disponible sur git hub:

 git clone http://github.com/mbornet-hl/hl 

et sur :

http://www.flashnux.com/notes/page_000022_US.html

hl est une commande Linux écrite en C, spécialement conçue pour colorer un fichier texte ou la sortie d’une commande . Vous pouvez utiliser jusqu’à 42 couleurs simultanément et utiliser un fichier de configuration pour simplifier les lignes de commande. Vous pouvez coloriser la sortie de chaque commande pouvant être transmise à une autre . Et si vous savez ce que sont les expressions régulières, ce sera très facile à utiliser . Vous pouvez utiliser la page de manuel pour comprendre comment l’utiliser.