Read logs with command tail -f file with strings color?

Bonjour à toutes et à tous !

Bonne Année :partying_face: - Que tous vos vœux de bonheur se réalisent :heart:

J’ai une question :

Comment-faire pour afficher de la couleur sur un mot ou plusieurs et cela en utilisant la commande (tail -f) de lecture de fin de fichier en temps réel et pas seulement les lignes qui contiennent le mot ?

tail -f /var/log/syslog

La commande ci-dessous me retourne bien de la couleur sur la string « error »- mais je souhaite afficher toute la sortie de syslog et pas seulement les lignes qui contiennent le mot error.

tail -f /var/log/syslog | grep error

Avez-vous une idée ?

Merci.

Romain

Bonjour

En utilisant un pipe et la commande sed avec des séquences d’échappement :

Par exemple :

tail -f /var/log/syslog | sed -e "s/CRON/"$'\033[1;5;41m'"&"$'\033[m'"/"   -e "s#/dev/sd.#"$'\033[1;92;41m'"&"$'\033[m'"#"

Difficile de te créer un exemple sans savoir quels mots tu faire apparaître en couleurs,
alors j’ai choisi les chaînes de caractères suivantes :
CRON
et tous les /dev/sd..
c’est à dire : /dev/sda1 /dev/sdb5 /dev/sdf9 etc.

3 J'aime

Merci @MicP j’étais sur cette page justement BASH Shell Change The Color of Shell Prompt on Linux or UNIX !

J’essaie :slight_smile:

Parfait ! Merci @MicP t’es trop fort !

c’est pour mon fichier zimbra.log / mail.log - il n’y a pas d’erreur dans mon syslog :rofl: :blush: :innocent:

Bonne soirée :slight_smile:

Bonne soirée à toi.

De fait, comme son nom l’indique : sed (Stream EDitor)
était tout indiqué pour ce que tu cherchais à faire.

Dans les premières lignes du manuel de la commande sed,
on peut lire :

NAME
       sed - stream editor for filtering and transforming text
1 J'aime

C’est peut être parce que je n’ai lu que Les commandes fondamentales de Linux :wink:

Merci @MicP ! Bonne journée. Bon courage !

Romain - (My blog ZW3B) :smiley:

J’ajoute ce lien : How to have tail -f show colored output pour informations supplémentaire.

Bonne journée.

super utile, trop cool :slight_smile: :slight_smile:

1 J'aime

Je déterre le sujet pour une petite question:
est-ce que vous connaissez un moyen qui permet de faire ça (modifier la mise en forme d’une chaîne de caractères qui matche une expression) globalement dans le shell ?

Je sais que vim fait déjà ça (la chaîne « TODO » est par exemple affichée sur un fond jaune si elle est dans un commentaire), emacs aussi paraît-il, mais ce serait sympa si bash pouvait faire la même chose (ou un autre shell d’ailleurs)
J’ai cherché rapidement sur le ouèbe sans succès, alors si quelqu’un ici a une idée…

Il va falloir que tu précises mieux ce que tu voudrait faire,
parce que je ne comprends pas ce que tu as voulu dire.

C’est ce que fait la ligne de commande sed que j’ai proposée dans mon précédent message de ce fil de discussion, il faudra juste que tu précises dans quel contexte tu veux que ce motif apparaisse sur fond jaune.

Par exemple,
lance cette ligne de commandes :

echo "# TODO : bla bla etc." | sed "s/^# *TODO *:/"$'\033[30;103m'"&"$'\033[m'"/"

et si le texte à colorisé était contenu dans un fichier nommé monFichier.txt

cat monFichier.txt | sed "s/^# *TODO *:/"$'\033[30;103m'"&"$'\033[m'"/"

Oui j’aurais sans doute dû préciser: « sans faire appel à un autre processus ». En gros c’est plutôt une fonctionnalité du shell, que je cherche, quitte à changer de shell.
Comme printf interprète aussi les séquences d’échappement et que c’est une fonction built-in de bash, je me disais qu’il y avait peut-être moyen…

@MicP - tu n’aurais pas à tout hazard un lien - un mémo avec toutes les couleurs :wink: - pour sed et/ou perl et/ou PS1… ou un petit cours en français ^^

J’ai bien trouvé ce lien comme je vous le disais plus haut mais bon si vous avez d’autres infos persos :

Bonne journée.

Il en a donné un un peu plus haut :smiley: terminal - List of ANSI color escape sequences - Stack Overflow

Ah oui Merci @Sputnik93 - Aveugle je suis ! Bonne journée !

Je cherchais cette explication :

echo -e « \033[31;1;4mHello\033[0m »
où la première partie rend le texte rouge (31), gras (1), souligné (4) et la dernière partie efface tout cela (0).

Super lien @MicP !!! Merci beaucoup ! Merci re @Sputnik93 :wink: Merci à Andrew Marshall aussi :slight_smile: :slight_smile:

Le shell est l’interpréteur de commandes,
il ne fait que lire les commandes entrées, les interpréter, et éventuellement, il retournera des messages d’erreurs et ce que la commande lui demandera d’afficher.

Donc, je ne vois pas comment le shell pourrait afficher le mot TODO
et encore moins d’où il aurait pu extraire ce mot
et ce qui pourrait être considéré comme un « commentaire » par le shell.

C’est forcement un programme qui sera lancé par le shell,
et c’est ce programme qui ira lire un fichier dans lequel il y aurait le mot TODO pour l’afficher

Il reste à définir ce qu’est un commentaire.

Même chose pour la commande interne du bash printf :
il faudra lui donner une chaîne de caractère à afficher,
et il faudra donc bien que cette chaîne de caractères provienne de quelque part.

Et comment considérer que cette chaîne est extraite d’une ligne commentée restera encore à définir, car la façon dont les lignes sont commentées dans un fichier, dépends du programme qui va utiliser ce fichier.

Tout à fait, c’est justement la mise en forme de cet affichage (sur la sortie standard ou l’erreur standard) que je me demandais s’il était possible de modifier, indépendamment de la commande qui veut écrire sur la sortie.

(pour le commentaire, c’était juste pour l’exemple dans vim)

Je reviendrais plus tard : un de mes fils a dû aller aux urgences

EDIT : OK, après radiographies, il n’a aucun OS de fracturé, j’ai eu peur de l’avoir mal configuré, et puis, j’avais quand même une sauvegarde, mais elle est un peu plus vielle, mais bon, on s’y attache avec le temps. :slightly_smiling_face:

Bien sûr, bon courage et on croise les doigts pour le fils :crossed_fingers:

1 J'aime

Super les gars :slight_smile:

Je me suis fait çà déjà - c’est très bien :

tail -f /var/log/mail.log /var/log/zimbra.log | sed -e "s/error/"$'\033[48;5;196m'"&"$'\033[m'"/g" | sed -e "s/status=deferred/"$'\033[38;5;196m'"&"$'\033[m'"/g" | sed -e "s/status=sent/"$'\033[38;5;41m'"&"$'\033[m'"/g" | sed -e "s/\(lab3w.fr\|lab3w.com\|zw3b.fr\|zw3b.net\|zw3b.tv\|zw3b.site\|zw3b.blog\|ipv01.net\|ipv10.net\)/"$'\033[38;5;43m'"&"$'\033[m'"/g"

  1. Pour identifier les « error » en background rouge
  2. Pour identifier les « status=deferred » en font color rouge
  3. Pour identifier les « status=sent » en font color verte
  4. Pour identifier mes « sites Web » en font color blanche # style tous ces sites ^^ haha

J’ai ajouté l’option « g » en fin pour afficher la couleur plusieurs fois par ligne.

Merci !