GNU/Linux >> Tutoriels Linux >  >> Linux

Sortie de mise en évidence des couleurs basée sur regex dans le shell

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

Linux
  1. 2>&1 et comprendre les autres idiomes du script shell

  2. Comment affecter la sortie d'une commande à une variable Shell ?

  3. Stockage de la sortie de la commande dans la variable Shell ?

  4. Quelle est la différence entre obtenir la sortie de la commande en utilisant `command` et $ (commande) dans Shell ??

  5. Comment savoir si la sortie d'une commande ou d'un script shell est Stdout ou Stderr ?

Comment exécuter des commandes Shell via un serveur HTTP

Comment rediriger la sortie de la commande shell

Shell Scripting Part4 - Entrée, sortie et redirection

Bibliothèque de sortie de script shell coloré

Rediriger la sortie de la commande dans docker

Changer l'éditeur crontab par défaut en nano dans FreeBSD