Les réalisateurs de films policiers ne s'y trompent pas : lire des flux de textes en ligne de commande nécessite parfois le super pouvoir de lisibilité.
Bien que les outils GNU soient extrêmement pratiques pour manipuler des flux de texte, il en manquait un pour aider à mettre en valeur l'information importante, sans masquer l'accessoire. Par exemple pour faciliter la lecture de logs s'étendant sur plusieurs lignes ou pour détecter rapidement le numéro de ligne d'un fichier responsable d'une erreur de compilation.
Heureusement, grâce à la commande colout
(aujourd'hui en version 1.0), vous pouvez maintenant très facilement coloriser colorer colorier mettre de la couleur là où vous le souhaitez dans votre ligne de commande.
Basiquement, colout s'utilise comme un filtre de flux de texte classique, généralement après un pipe, et mets en valeur les bouts de texte correspondant à une expression régulière avec une couleur et un style de votre choix :
<flux de texte> | colout <expression régulière> [couleur [style]]
L'IHM de colout est pensée pour être simple tout en permettant des utilisations vraiment intéressantes, telles que le coloriage l'application des couleurs sur les groupes des expressions, l'utilisation de cartes de couleurs (mais si, vous savez, les couleurs de l'arc-en-ciel…), la coloration la mise en valeur de la syntaxe de code source, des thèmes automatiques et même l'application d'une couleur en fonction de la valeur d'un nombre.
Pour ceux qui utiliserait déjà la concurrence, n'hésitez pas à comparer le rendu de colorgcc avec le thème correspondant de colout (ici avec le colorisationnage thème CMake en bonus).
Notez également que le système de thèmes de colout permet de faire la même chose que ccze ou colordiff (et d'autres choses encore) avec une seule commande.
Par contre, l'approche de colout est différente de celle de cw, qui permet de colorouiller mettre en couleur des applications interactives (mais nécessite des fichiers de configuration abscons), là où colout s'insère dans le flux de texte.
L'application la plus proche de colout est sans doute colorit, mais vous devez préparer à l'avance vos colorations schémas de couleurs dans un fichier de configuration (en… m4, bon courage).
Heureusement, colout est écrit en python et est distribué sous licence GPLv3.
Aller plus loin
- Exemples utiles avec captures d'écrans (2869 clics)
- Code source et manuel (602 clics)
# Outil intéressant
Posté par dave_null (site web personnel) . Évalué à 10.
L'outil semble très intéressant.
Dans le même genre mais en inutile, j'aime beaucoup lolcat qui permet de colorier en arc-en-ciels les flux de texte.
# Blague
Posté par claudex . Évalué à 9.
En tout cas, tous ces
colorouillagescolorationblague sur les mots m'ont bien fait rire.« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Blague
Posté par MCMic (site web personnel) . Évalué à 2.
Dans mon lecteur RSS les mots barrés s'affichaient normalement, j'ai trouvé ça très bizarre du coup…
# PKGBUILD
Posté par daemontux . Évalué à 7. Dernière modification le 05 avril 2013 à 00:04.
J'adore ! J'utilisais déjà colordiff pour les diff et des alias pour activer la couleur sur pas mal de commandes, mais il me manquait un truc pour les fichiers de log.
Pour ceux qui sont sous archlinux, je viens de bricoler un PKGBUILD vite fait dans AUR :
Au passage, quelqu'un a-t-il une solution pour convertir un texte colorisé dans un terminal vers un format exploitable ailleurs ? Genre qui convertirait les caractères de contrôle du terminal en balises HTML par exemple ?
[^] # Re: PKGBUILD
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 5.
aha (ANSI HTML adapter) : http://ziz.delphigl.com/tool_aha.php
[^] # Re: PKGBUILD
Posté par Thomas Etcheverria . Évalué à 2.
Merci pour le PKGBUILD.
[^] # Re: PKGBUILD
Posté par Sam E. (site web personnel) . Évalué à 2.
Ah merci pour le PKGBUILD!
Très intéressant cet outil.
En lisant le journal ça m'a semblé avoir un coté gadget inutile, mais le site du projet présente très bien la chose et les exemples donnent envie de le tester :)
# ccze
Posté par olaf . Évalué à 5.
Perso, j'utilise ccze qui fait bien la job.
[^] # Re: ccze
Posté par steph1978 . Évalué à 2.
ccze m'a l'air spécialisé dans certains démon et orient colonnes plutôt que ligne.
ces deux outils seraient alors très complémentaires.
# ack
Posté par GCN (site web personnel) . Évalué à 3.
J'ai découvert, pas plus tard qu'hier, ack: http://betterthangrep.com/
Testé et approuvé ;).
[^] # Re: ack
Posté par Reihar . Évalué à 1.
Ce domaine…
[^] # Re: ack
Posté par steph1978 . Évalué à 2.
ack c'est un grep --color qui évite les fichiers de versionning, donc pas vraiment le même objectif.
[^] # Re: ack
Posté par barmic . Évalué à 2.
J'aurais plutôt dis un :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: ack
Posté par barmic . Évalué à 0.
ploc
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: ack
Posté par Aissen . Évalué à 2.
Il te faut dans ce cas ag (better than ack):
https://github.com/ggreer/the_silver_searcher
En gros une réimplémentation en C de ack. Très rapide.
# grep
Posté par zebra3 . Évalué à 2.
À part les trucs funs comme l'arc en ciel, je ne vois pas vraiment d'usage « utile » :-/
Je pense qu'un grep --color suffit largement à mettre en valeur ce qu'on cherche (avec l'alias qui va bien).
Mais bon, c'est quand meme un projet sympa :-)
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: grep
Posté par Guillaume Denry (site web personnel) . Évalué à 9. Dernière modification le 05 avril 2013 à 11:17.
Typiquement les droits avec des couleurs séparés par entité (user/group/everyone) :
Quand je vois ça, mon cerveau passe un peu de temps (pas trop je vous rassure quand même) à séparer, alors qu'avec
Je sépare instantanément les droits de chaque entité sans effort.
C'est pas grand chose mais pour moi, c'est tout de même relativement « utile ».
[^] # Re: grep
Posté par Michaël (site web personnel) . Évalué à 0.
D'un côté je comprends tout à fait ton point de vue, mais d'un autre, le fait que tu aies besoin d'un peu de temps pour décomposer le code montre que ce n'est pas une activité très importante (en fréquence de répétition) pour toi: à quoi bon aller plus vite?
Si tu passais plus de temps à lire des pâtés -rw-rw-rwx tu saurais tout par cœur sans rien décomposer du tout, un peu comme ces freaks du démineur qui en pratique ne réfléchissent plus vraiment mais connaissent par cœur toutes les arrangements 3x3 du jeu, ce qui leur permet de résoudre les grilles les plus grandes en une trentaine de secondes (déjà vu avec mes deux yeux!).
[^] # Re: grep
Posté par Guillaume Denry (site web personnel) . Évalué à 6.
Je ne cherche pas forcément à gagner en vitesse mais également en confort.
[^] # Re: grep
Posté par ariasuni . Évalué à 1. Dernière modification le 06 avril 2013 à 22:37.
Ou pour ne pas finir aveugle à 24 ans à force d’essayer de distinguer du blanc d’un autre truc blanc parmi d’autres lignes de blanc (marche aussi avec d’autres couleurs).
Écrit en Bépo selon l’orthographe de 1990
[^] # Re: grep
Posté par claudex . Évalué à 5.
Il y a des exemples que je trouve intéressant, par exemple le
ps aux | grep firefox | colout "^\w+\s" blue
, si tu fais ungrep --color
, tu n'auras pas tu tout le même résultat. Ou avoir plusieurs couleurs par ligne commels -l ~ | colout "^(d*)-*(rwx)(rwx)(r-x)" blue,red,yellow,green
.« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: grep
Posté par windu.2b . Évalué à 3.
Ta dernière commande ne fonctionne que si les droits sont
rwxr-xr-x
. Dans les autres cas, la coloration ne se fait pas[^] # Re: grep
Posté par claudex . Évalué à 3.
J'ai recopié bêtement ce qu'il y avait sur le site, il faudrait évidemment écrire un truc un peu plus compliqué.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: grep
Posté par windu.2b . Évalué à 2. Dernière modification le 07 avril 2013 à 11:46.
Désolé, je n'avais pas fait gaffe que tu avais repris un des exemples du site (où il est clairement indiqué que ça ne colorise que lorsque les droits sont
rwxrwxr-x
).Du coup, voici la regexp qui colorie tous les droits (même le
-
qui indique l'absence du droit d'accès) :ls -l ~ | colout "^([d|-])([r|-][w|-][x|-])([r|-][w|-][x|-])([r|-][w|-][x|-])" blue,red,yellow,green
[^] # Re: grep
Posté par Benoît Sibaud (site web personnel) . Évalué à 2.
ls -ld /tmp /dev/sda /dev/tty /bin/su /usr/bin/X /dev/core /dev/xconsole /dev/log| ./colout.py "^([bcdlpsD-])([r-][w-][xsS-])([r-][w-][xsS-])([r-][w-][xtT-])" blue,red,yellow,green
-rwsr-xr-x 1 root root 35200 mai 25 2012 /bin/su
lrwxrwxrwx 1 root root 11 avril 7 10:47 /dev/core -> /proc/kcore
srw-rw-rw- 1 root root 0 avril 7 10:47 /dev/log
brw-rw---T 1 root disk 8, 0 avril 7 10:47 /dev/sda
crw-rw-rw- 1 root root 5, 0 avril 7 10:47 /dev/tty
prw-r----- 1 syslog adm 0 avril 7 10:47 /dev/xconsole
drwxrwxrwt 13 root root 20480 avril 7 12:07 /tmp
-rwsr-sr-x 1 root root 9508 juin 26 2012 /usr/bin/X
[^] # Re: grep
Posté par barmic . Évalué à 4.
Si on veut être complet ça doit être quelque chose comme ça plutôt :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: grep
Posté par Olivier Abad . Évalué à 10.
Et si on veut se simplifier la vie, on peut se contenter de :
[^] # Re: grep
Posté par nojhan (site web personnel, Mastodon) . Évalué à 7.
L'exemple le plus frappant est la lecture d'une sortie très verbeuse, comme par exemple la sortie de gcc.
Tu ne veux pas filtrer avec grep parce que tu peux avoir besoin de tout lire. Par contre il est pratique de pouvoir repérer très rapidement les passages qui t'intéressent (les erreurs, par exemple). Les couleurs sont un moyen très efficace de faire ça.
C'est pour ça que j'ai commencé à faire colout, mais je me suis assez vite rendu compte que le problème se posait aussi pour plein d'autres choses (diff, logs) et même dans des cas où j'utilisais grep habituellement (grep de code source, par exemple).
On peut se dépatouiller avec grep ou d'autres commandes dédiées (git coloré, colordiff, ccze, etc.) dans la plupart de ces cas mais je me suis vite rendu compte qu'il était très pratique d'avoir une seule commande bien pensée pour remplacer plein de façon disparates de faire moins bien.
[^] # Re: grep
Posté par zebra3 . Évalué à 5.
Tu as tout de meme pas mal d'options avec grep, comme -A, -B ou -C pour afficher certaines lignes avant ou après le motif, et je trouve ça déjà très puissant
Après, il est vrai que parfois ce n'est pas suffisant, mais dans ces cas précis, vim prend le relais. Il gère par exemple la coloration des logs.
Attention, je ne dis pas colout n'est pas utile, juste que ça me parait spécifique à des cas très particuliers.
En tous les cas je te souhaite bon courage, et je compte bien l'essayer dès que j'ai un peu de temps (voire en faire un paquet debian si ça me plait bien :-).
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: grep
Posté par Guillaume Denry (site web personnel) . Évalué à 2.
… et ça peut être sublimé, avec le
grisageeuh,grisuregrisement (pas sûr) des lignes ajoutées par ces options avec colout \o/ (c'est facile en plus, il suffit de détecter un "-" juste après le nom du fichier au lieu d'un ":", qui le fait ?)[^] # Re: grep
Posté par djabal . Évalué à 2.
Un autre problème de grep est que si tu pipe plusieurs grep, tu gardes juste la colorisation du dernier, or quand je fais quelque chose comme :
je voudrais bien que mes bidule soient colorés…
Avec un coup de colout derrière j'ai ce que je veux !
[^] # Re: grep
Posté par wismerhill . Évalué à 7. Dernière modification le 06 avril 2013 à 13:58.
grep --color=always
très pratique à combiner avec un less -R
[^] # Re: grep
Posté par djabal . Évalué à 2.
Merci, mais cela pose un autre un problème si je chaine mes grep comme précédemment :
avec un fichier bidule.list qui ressemble à ça :
Les caractères d'échappement des couleurs semblent empêcher mon deuxième grep de fonctionner correctement … pas glop !
[^] # Re: grep
Posté par wismerhill . Évalué à 3.
Oui, forcément puisque ces caractère sont ajoutés à la sortie que le deuxième grep reçoit en entrée.
Dans ton exemple il faut inverser les deux grep, comme le grep -v ne sort que les lignes qui ne correspondent pas il n'y mettra aucune couleur, l'autre peut alors travailler sans problème sur le flux resultant.
Une autre solution est de faire tout en un seul grep, mais ça peut rapidement faire des expressions rationnelles très compliquées. Dans ton cas il faudrait activer les expressions rationnelles de type perl (-P avec GNU grep) pour pouvoir faire un «zero-width negative look-ahead» (man perlre), ce qui te donnerait l'expression suivante
qui peut se traduire en français pas «sélectionner bidule s'il n'est pas suivi par -truc».
[^] # Re: grep
Posté par steph1978 . Évalué à 3.
à deux derrière l'écran : "regarde là, dans la ligne verte, l'erreur est là".
seul : bah c'est joli :) et en fait ça évite de se mélanger aussi.
# Bien que les outils GNU soient extrêmement pratiques
Posté par Enj0lras . Évalué à 1.
s/GNU/Unix/
[^] # Re: Bien que les outils GNU soient extrêmement pratiques
Posté par DerekSagan . Évalué à 1.
s/Unix/Posix/
#LesMouchesOntMal
# Option
Posté par podoc . Évalué à 2.
Ca à l'air sympathique.
Je n'ai pas regardé dans le détails mais J'aurais aimé une option -f pour aller chercher la liste des expressions régulière couleur dans un fichier de conf
Par ex :
[^] # Re: Option
Posté par nojhan (site web personnel, Mastodon) . Évalué à 2.
C'est ce que fait l'option
-t
avec les fichiers de thème.Un thème est une fonction qui renvoie une liste de la forme :
Voir les fichiers
colout_*.py
pour des exemples.[^] # Re: Option
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 10.
UUOC.
[^] # Re: Option
Posté par Spack . Évalué à 0.
Ah non pas cette fois, colout ne fonctionne que sur les flux de texte (pour l'instant?). Voir le README.
[^] # Re: Option
Posté par dave_null (site web personnel) . Évalué à 9.
[^] # Re: Option
Posté par Michaël (site web personnel) . Évalué à 1.
Tu n'as pas vu le FR à la fin de LinuxFR ? :-) Ici ça s'appelle un EIDC!
[^] # Re: Option
Posté par Anonyme . Évalué à 2. Dernière modification le 09 avril 2013 à 20:19.
J’utilise
lwatch
du paquetlwatch
avec un fichier de conf du style :Exemple :
tail -f /var/log/auth.log | lwatch
.# app-misc/grc
Posté par RD . Évalué à 2.
$ cat .lessfilter
case "$1" in
*.log) which grc &> /dev/null && grcat conf.log < "$1" ;;
# [...]
esac
exit 0
(app-misc/grc, GPLv2, http://kassiopeia.juls.savba.sk/~garabik/software/grc.html)
# Colorer du texte sur la sortie standard en python
Posté par kaliko (site web personnel) . Évalué à 3.
Je suis tombé récemment sur un bout de code permettant de facilement colorer du texte sur la sortie standard.
https://gist.github.com/martin-ueding/4007035
J'ai trouvé ça utile pour les quelques utilitaires que je développe pour la console.
[^] # Re: Colorer du texte sur la sortie standard en python
Posté par nojhan (site web personnel, Mastodon) . Évalué à 1.
Il y a peut-être moyen de refactoriser un peu colout pour qu'il puisse servir de module pour faire ce genre de truc aussi…
# integration
Posté par Stibb . Évalué à 1.
Comment intégrer ce genre de programmer pour que ça soit utiliser intelligement mais sans devoir rajouter à toutes ses commandes un "| colout blabla" ?
Un alias sur certaine commande?
Dans un script (mais si la commande n'est pas dispo sur certain environement?)
[^] # Re: integration
Posté par nojhan (site web personnel, Mastodon) . Évalué à 1.
Une fonction ou un alias, par exemple j'utilise ça pour colorer une sortie de build cmake/g++ :
Ça s'utilise simplement :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.