J'utilise un code de test unitaire. Le code de test unitaire génère du texte normal. Il y a beaucoup de texte, donc je veux mettre en évidence pour l'utilisateur des mots clés importants.
Dans ce cas, les mots clés sont "PASS" et "FAIL".
Comment coloriez-vous "PASS" pour qu'il soit vert et "FAIL" pour qu'il soit rouge?
bash
shell-script
scripting
colors
Trevor Boyd Smith
la source
la source
Réponses:
supercat
semble faire ce que vous cherchez.Il ne semble pas y avoir de moyen de lui dire quoi coloriser sur la ligne de commande, vous devez spécifier un fichier de configuration.
Je semble me rappeler qu'il existait auparavant un programme appelé `` hilite '' ou `` hl '' qui mettait en évidence du texte correspondant à un modèle (comme
grep --colour
, mais affichant également des lignes non correspondantes), mais je ne pouvais pas le trouver lorsque je le cherchais.Enfin, GNU
grep
peut être utilisé pour mettre en évidence les motifs - mais une seule couleur peut être utilisée (c'est-à-dire que vous ne pouvez pas avoir PASS en vert et FAIL en rouge, les deux seraient mis en surbrillance avec la même couleur).Dirigez vos données via quelque chose comme ceci:
Cet exemple utilise egrep (aka
grep -E
), mais-G
les expressions rationnelles de base,-F
les chaînes fixes et-P
PCRE fonctionnent également.Tous les matchs seront mis en évidence. La valeur par défaut est rouge ou définissez la variable d'environnement GREP_COLOR.
La clé de ce travail est que la finale
|$
du motif correspond à la fin de la ligne (c'est-à-dire que toutes les lignes correspondent) de sorte que toutes les lignes seront affichées (mais pas colorisées).Ce
\b
sont des marqueurs de limite de mot pour qu'il corresponde par exemple à FAIL mais pas à FAILURE. ils ne sont pas nécessaires, supprimez-les donc si vous souhaitez faire correspondre des mots partiels.Voici l'exemple de script wrapper pour supercat que j'ai écrit hier. Cela fonctionne, mais en l'écrivant, j'ai découvert que supercat n'a pas d'option pour les recherches non sensibles à la casse. OMI, ce qui rend le programme beaucoup moins utile. Cependant, cela a grandement simplifié le script car je n'avais pas à écrire une option '-i' :)
la source
supercat
vous pouvez modifier le script que vous avez publié pour générer un fichier de configuration temporaire basé sur les arguments de la ligne de commande, puis appelerspc -c /path/to/your/temp/config
. Cela vous permettrait de spécifier facilement différentes couleurs pour différents motifs sur la ligne de commande.Voici un script à usage général pour coloriser les motifs regex (a probablement besoin de quelques retouches):
Nommez-le
hilite.sh
et utilisez-le de cette façon:la source
community wiki
parce que ma solution ne fonctionne pas.$BIN
viaeval
dans la substitution de commandes est probablement fragile, encombrante et carrément dangereuse. STDOUT est un flux et est généralement destiné à être traité par des outils de type flux. Essayer de capturer un flux entier dans une variable n'est pas très efficace. En outre, ileval
est dangereusement puissant , alors n'utilisez-le que si vous savez vraiment ce que vous faites.L'incorporation de chaînes arbitraires (comme la
tput
sortie) dans lessed
expressions de remplacement est problématique car vous devez vous assurer (en vous échappant) que la chaîne est unesed
syntaxe valide , ce qui est plus complexe à éviter. J'utiliserais à laawk
place. À titre d'exemple:L'essentiel est d'assigner les
tput
séquences auxawk
variables, faites ici en utilisant les-v
options.la source
awk
script se compose d'un ensemble de blocs (le truc entre le{}
niveau supérieur). Chaque bloc est associé à une condition - dans mon article ci-dessus, il n'y en a pas parce que je veux agir inconditionnellement sur chaque ligne d'entrée. Awk fonctionne en lisant des enregistrements à partir de fichiers ou d'une entrée standard (dans ce cas, il s'agit de STDIN b / c, aucun nom de fichier n'a été fourni), et en les comparant à chaque bloc dans l'ordre, en exécutant le bloc sur l'enregistrement si la condition correspond.utilisez printf:
par exemple.
le dernier
\n
ajoute le caractère de nouvelle ligne.pour voir les valeurs possibles d'essayer quelque chose comme:
en plus de la couleur, vous pouvez ajouter des modificateurs comme du texte en gras ou souligné ou coloré avec un arrière-plan coloré en combinant les chiffres. Pour créer du texte bleu avec un arrière-plan gris souligné et barré par l'utilisation:
À votre santé,
/ B2S
la source
Si vous êtes heureux d'installer un script BASH et
ack
, lehhlighter
package a des couleurs par défaut utiles et une interface simple https://github.com/paoloantinori/hhighlighter :Vous pouvez l'utiliser comme tel pour mettre en surbrillance les lignes commençant par
FAIL
:ou qui contiennent
FAIL
:ou pour diverses entrées de journal courantes:
Et bien sûr, pour une seule couleur (rouge) avec grep uni:
Le
^
correspond à chaque ligne, mais est un matcher spécial et imprime la ligne entière. L'expression à mettre en évidence est définie après a|
. D'autres expressions peuvent être ajoutées tant qu'elles sont séparées par|
.la source