Existe-t-il une commande qui peut être utilisée pour mettre facilement en surbrillance (avec des couleurs, du texte en gras ou un arrière / premier plan inversé) des chaînes spécifiques dans stdin tout en passant la chaîne entière à stdout? Je pense à le construire , mais je préfère simplement l'utiliser s'il existe déjà. Quelques fonctionnalités souhaitables:
- Les chaînes de surbrillance distinctes sont mises en surbrillance différemment, de manière automatique. Par exemple, la première chaîne sera mise en évidence en rouge, la seconde en vert, la troisième en bleu sans configuration manuelle .
- Détecte la prise en charge des couleurs et revient aux méthodes de mise en évidence en gras / inversé / autres lorsque celles-ci sont disponibles.
- Permet la correspondance d'expressions régulières et de chaînes littérales.
- Fait de préférence quelque chose d'intelligent si les correspondances se chevauchent, comme "foobar" et "barbar".
- Rien n'est modifié entre stdin et stdout à l'exception de l'ajout de codes couleur.
Réponses:
Peut-être le colorant générique (grc) de Radovan Garabík ? Il attend un fichier de configuration comme argument et fonctionne avec les expressions rationnelles. Donc pas tout à fait sans configuration, mais vous pouvez utiliser la substitution de processus (
<(list)
), donc certainement sans configuration manuelle :-)la source
grc
a un script d'aide:grcat
. Voici un exemple de coloration de toutes les lettres majuscules en rouge. Étape 1: Configurez le fichier de configuration:printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps
Étape 2; Utilisez-le:echo Hello World | grcat red-caps
... La page de manuel indique 3 répertoires de configuration qu'il recherche, puis suggère (?) Que le fichier de configuration peut être un chemin absolu, mais cette dernière méthode de recherche du fichier de configuration ne fonctionne qu'avec des chemins relatifs pour moi (grc version 1.3)Sed à la rescousse!
Vous pouvez améliorer cela (car il en a vraiment besoin) mais cela fonctionne plutôt bien.
Par souci de simplicité, hilight accepte une paire d'arguments (d'abord la correspondance, ensuite la couleur) Dans ce script, l'attrib est toujours en gras
Lisez man console_codes (Graphic Rendition) pour voir les différences de couleurs, ou essayez ceci
Il présente des inconvénients importants dans l'utilisation de ces œuvres:
mais pas du tout:
parce que [: digit:] trouve les nombres dans les sécuences d'échappement sur les subsitutions précédentes.
Quelque chose comme:
fonctionnera toujours comme excepté.
En utilisant la commande de temps, j'ai trouvé cet incrément de quatre fois le temps écoulé, ce qui n'est pas trop.
Vous pouvez remplacer la commande sed par n'importe quel autre analyseur que vous aimez ou qui correspond à vos besoins (awk, etc ...)
la source
On peut également utiliser egrep avec un motif qui correspond à chaque ligne sur un caractère non imprimable, comme:
la source
clide fonctionne très bien. Je l'utilise sur RHEL 6.2, depuis le dépôt EPEL
la source
Si votre version de
grep
est livrée avec coloration, vous pouvez utiliser l'altération regexp pour que grep surligne le texte et corresponde également à chaque ligne afin que rien ne soit exclu. Ce qui suit devrait faire l'affaire:la source
Comme vous l'avez mentionné dans le lien,
grep --color=always
ne fonctionne que pour un seul motif. Cela dit, je ne crois pas qu'un tel outil existe.la source
J'utilise http://em.readthedocs.org/ . Facile à installer sur diverses plateformes grâce à Python. Simple et fonctionne bien.
la source
em
, veuillez reformuler votre réponse pour être clair que vous n'êtes pas un utilisateur, mais l'auteur de l'outil suggéré.