Il y a une réponse dans superuser.com :
your-command | grep -E --color 'pattern|$'
ou
your-command | grep --color 'pattern\|$'
Cela "correspondra à votre motif ou à la fin de ligne de chaque ligne. Seul le motif est mis en surbrillance..."
Vous pouvez essayer (peut-être a-t-il besoin d'un peu plus d'évasion) :
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
Si vous voulez l'activer globalement, vous aurez besoin d'une fonctionnalité de terminal, pas d'un processus dans lequel vous dirigez la sortie, car un tube perturberait certaines commandes (deux problèmes sont que stdout et stderr apparaîtraient hors service et mis en mémoire tampon et que certaines commandes se comportent différemment lors de la sortie vers un terminal).
Je ne connais aucun terminal "conventionnel" avec cette fonctionnalité. C'est facile à faire dans Emacs, dans un term
tampon :configurez font-lock-keywords
pour term-mode
.
Cependant, vous devez bien réfléchir si vous voulez vraiment cette fonctionnalité tout le temps. Que faire si la commande a ses propres couleurs (par exemple grep --color
, ls --color
) ? Il serait peut-être préférable de définir un alias court pour une commande de coloriseur et d'exécuter myCommand 2>&1|c
quand vous voulez coloriser myCommand
la sortie. Vous pouvez également attribuer des alias à certaines commandes spécifiques de toujours colorier.
Notez que le statut de retour d'un pipeline est son dernier commande, donc si vous exécutez myCommand | c
, vous obtiendrez le statut de c
, pas myCommand
. Voici un wrapper bash qui évite ce problème, que vous pouvez utiliser comme w myCommand
:
w () {
"[email protected]" | c
return $PIPESTATUS[0]
}
Vous pouvez utiliser des programmes tels que :
- spc (Supercat)
- grc (colorant générique)
- mettre en surbrillance
- histring
- pygmenter
- grep --color
Vous pouvez faire quelque chose comme ça, mais les commandes ne verront pas de tty (certaines refuseront de s'exécuter ou se comporteront différemment ou feront des choses bizarres) :
exec > >(histring -fEi error) # Bash