ecatomb Posté(e) le 15 mars 2021 Partager Posté(e) le 15 mars 2021 sed 's/\x1b//g' statutCollab.txt | sed 's/\[1;32m//g' | sed 's/\[0;39m//g' | mail -s "Vérifications du Statut de Collab" toto@pluton.com Après, il doit y avoir moyen de faire tout ça en une seul commande pour optimiser tout ça. Mais pour un petit fichier, pas besoin de se prendre la tête Lien vers le commentaire Partager sur d’autres sites More sharing options...
brice.wernet Posté(e) le 15 mars 2021 Partager Posté(e) le 15 mars 2021 Il y a 10 minutes, jakol a écrit : j'ai fait: sed 's/\x1b//g' statutCollab.txt && && sed 's/\[1;32m//g' statutCollab.txt | mail -s "Vérifications du Statut de Collab" toto@pluton.com sed 's/\x1b//g' statutCollab.txt | sed 's/\[1;32m//g' statutCollab.txt | mail -s "Vérifications du Statut de Collab" toto@pluton.com Attention, dans les deux cas, tes commandes sed s'appliquent à un fichier d'entrée et sortent le résultat dans la console. Quand tu fais sed 's/\x1b//g' statutCollab.txt | sed 's/\[1;32m//g' statutCollab.txt tes deux commandes repartent du fichier d'origine. Il faut faire:: sed 's/\x1b//g' statutCollab.txt | sed 's/\[1;32m//g' | mail -s "Vérifications du Statut de Collab" toto@pluton.com et ça devrait marcher: le second sed prend alors directement le résultat du premier.avec sed 's/\[1;[0-9]*m//g' tu devrais supprimer tous les [1;...m Sinon, l'explication de pourquoi ça ne marchait pas au début et que tu avais un message encodé base64: tu captures le résultat d'une console VT100. ton fichier texte ne contient pas que du texte, mais tu ne le verras pas toujours à l'affichage (on peut construire des fichiers qui ne s'affichent pas par un "cat" Tu envoies ce résultat dans mil, qui détecte des caractères spéciaux et fait un encodage pour que tout passe (ton fichier semblait être un binaire) D'où mon insistance pour télécharge le fichier afin de l'analyser. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ecatomb Posté(e) le 15 mars 2021 Partager Posté(e) le 15 mars 2021 Il est aussi possible de faire un sed -i 's/\x1b//g' statutCollab.txt L'option "-i" permettant de modifier le fichier par le résultat du sed. Donc c'est plutôt à éviter sur le fichier d'origine pour ne pas le perdre. Cette option ne fonctionne pas sur le mac Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 Pour répondre à @brice.wernet, il faut prendre le fichier est remplacé le caractère ^ par 0x1B (caractère escape dans Notepad++) @jakol a posté son message sur 1 autre forum (developpez.net) Et la réponse de N_BaH est cat -v fichier | mail -s sujet user@machine J'ai testé le cat seul, et cela ne semble pas fonctionner : cela remplace les caractères escape par des caractères ASCII. Peut-être que mail détecte les séquences de couleur ainsi et les supprime Il y a aussi la commande ansi2txt qui semble faire le travail, mais n'est pas standard (dans le paquet colorized-logs ou kbtin) Sinon, la majorité des réponses sont à coups de sed et perl (ou alors par exemple, de tput, XTERM="..." pour créer 1 session sans les couleurs) Lien vers le commentaire Partager sur d’autres sites More sharing options...
brice.wernet Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 Il y a 43 minutes, foetus a écrit : J'ai testé le cat seul, et cela ne semble pas fonctionner : cela remplace les caractères escape par des caractères ASCII. Peut-être que mail détecte les séquences de couleur ainsi et les supprime C'est une chose particulière que de traiter des fichiers textes de source et systèmes différents. Ce que cat affiche n'est pas la réalité: c'est déjà interprété (longue expérience de traitement des accents et autres caractères "copyright" "marque déposée" entre des systèmes windows et des systèmes de 1996, et la réinterprétation de flux d'impression matricielle 😅) Tout ce qu'un ordinateur affiche pour un affichage humain n'est pas forcément juste ou complet: il dépend de la police de caractère d'affichage ou de caractères d'échappement non imprimés ou réinterprétés. Exemple pour un flux d'impression matricielle: L'imprimante reçoit "mot<backspace><backspace><backspace>mot<backspace><backspace><backspace>____" L'imprimante imprime mot en gras car deux passages, et souligné cat ou type affiche "___" car "mot" est effacé deux fois à l'affichage (à cause des <backspace>) Moralité: "never trust text files." Anecdote: Ca marche aussi pour les exécutables: si on fait un type sur le fichier exécutable du jeu budokan sous DOS, au lieu de la bouillie de caractères informe dont certains nous faisaient passer en mode 40 colonnes, on a un joli message texte tout propre. pour faire ce genre de fichier, il suffit d'y inclure le caractère de fin de texte (EOT) pour la console. On pouvait donc faire des fichiers texte avec deux parties: la partie visible et la partie "cachée" en les séparant par ce caractère EOT. J'imagine qu'on peut le faire sous Unix. C'est pour cela que Windows est plus "juste" avec ses \r\n en fin de ligne, car c'est imprimable (comme sur un machine à écrire: \r pour retourner au début de ligne, \n pour aller à la ligne suivante) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 Bonjour, merci beaucoup pour les infos. J'ai effectivement posté la demande ailleurs...J'espère que vous ne le prenez pas mal.... Je souhaiterais savoir s'il est possible de récupérer le mot "Démarrée" ou "Arrêtée" dans le fichier statutCollab.txt et intégrer le mot dans le sujet du mail mail -s l'application est 'Démarrée' statutCollab.txt toto@pluton.fr ou mail -s l'application est 'Arrêtée' statutCollab.txt toto@pluton.fr Merci pour vos retours Bien cordialement Lien vers le commentaire Partager sur d’autres sites More sharing options...
ecatomb Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 Avec un grep Démarrée statutCollab.txt à faire avant le reste. Et suivant le code retour tu envoies avec un sujet ou l'autre. Sinon, vu qu'il y a plusieurs lignes, difficile d'extraire un mot particulier. A moins d'extraire uniquement la première ligne via la commande "head -1" pour ensuite ne farder que la partie de ton choix (via le sed à nouveau) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 Merci j'ai fait head -1 statutCollab.txt > etat.txt | sed 's/*/Démarrée/g' etat.txt apparement le sed n'est pas bon... lorsque j'ouvre à nouveau etat.txt, les lignes restent inchangées.. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ecatomb Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 head -1 statutCollab.txt | sed 's/\x1b//g' | sed 's/.*\[1;32m\(.*\)\[0;39m.*/\1/g' Cela devrait retourner le mot en couleur de la première ligne 😉 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 merci j'obtiens le résultat suivant est-il possible d'intégrer cette ligne entière dans le sujet du mail? mail -s "cette ligne" toto@pluton.fr 😏 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ecatomb Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 Plus d'explication sur ta commande il y a une heure, jakol a écrit : Merci j'ai fait head -1 statutCollab.txt > etat.txt | sed 's/*/Démarrée/g' etat.txt apparement le sed n'est pas bon... lorsque j'ouvre à nouveau etat.txt, les lignes restent inchangées.. Ton head récupère la première ligne et la stocke dans le fichier etat.txt : ok head -1 statutCollab.txt > etat.txt Le "|" permet de rediriger le résultat de la commande précédente à la suivante. Sauf que là tu n'as aucun résultat vu que tu le stockes dans un fichier. Le sed ne comprendra rien ici. Tu essayes de remplacer la répétition (*) de "rien" par le mot "Démarrée" dans le fichier etat.txt On utilise plutôt ".*", le point correspond à n'importe quel caractère et avec l'étoile il prendra donc toute la série de caractères possibles. Donc la ligne complète si rien d'autre de l'arrête. Je te conseille de regarder les expression régulières pour en savoir plus sed 's/*/Démarrée/g' etat.txt Il y a 7 minutes, jakol a écrit : merci j'obtiens le résultat suivant est-il possible d'intégrer cette ligne entière dans le sujet du mail? mail -s "cette ligne" toto@pluton.fr 😏 Pourtant, cela fonctionne bien : $ cat statutCollab.txt Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr ... Démarrée (pid : 2508) Statut de l'application (Espaces Collaboratifs) sur collab-app2.in.ac-strasbourg.fr ... Démarrée (pid : 1742) $ head -1 statutCollab.txt | sed 's/\x1b//g' | sed 's/.*\[1;32m\(.*\)\[0;39m.*/\1/g' Démarrée $ Le résultat du cat avec le "Démarrée" bien en couleur : Tu as sans doute fait une erreur ou un message d'erreur dans ta commande. Merci de la poster Sinon, oui il est possible d'intégrer la ligne dans le sujet du mail. Mais le caractère de couleur que tu as à nouveau (d'où ma certitude que tu as fait une erreur) va faire planter la commande 😁 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 1) oui effectivement : head -1 statutCollab.txt > etat.txt | sed 's/.*/"Démarrée"/g' etat.txt "Démarrée" 2) oui je souhaiterais intégrer la ligne entière (sans couleur si ça plante) ou juste le mot "Démarré" ou "Arrêtée" (si l'appli plante). Merci pour tes réponses enrichissantes Lien vers le commentaire Partager sur d’autres sites More sharing options...
brice.wernet Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 Il y a 18 minutes, jakol a écrit : 2) oui je souhaiterais intégrer la ligne entière (sans couleur si ça plante) ou juste le mot "Démarré" ou "Arrêtée" (si l'appli plante). Exemple de capture d'info avec sed: pour faire la capture d'une partie de la ligne, il faut la «décrire» et entourer entre parenthèses les infos intéressantes on passe sed en mode «print» (/p à la fin) pour un peu plus de clarté (ou plutôt un peu moins d’obscurité), on utilise l’option -r de sed qui permet de ne pas mettres des caractères d’échappement partout --> sed -rn 's/Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$/\1 \2 \3/p' Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$: description de la ligne le premier (.*) va capturer le nom de l’appli avec les parenthèses (capture 1) le second (.*) suit les «...» du message mais précède «(pid :», ce sera donc «Démarrée» ou «Arrêtée» (avec les espaces avant par contre) le troisième (.*) capture le numéro de process tout le reste sert à «matcher» la ligne (notamment le $ à la fin qui signifie «fin de la ligne» pour caler l’interpréteur, j’aurais dû mettre un «^» au début pour caler le début \1 \2 \3: demande à sed d'afficher la capture 1, puis la 2, puis la 3 p: commande d’affichage du résultat echo "Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr ... Démarrée (pid : 2508)"|sed -rn 's/Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$/\1 \2 \3/p' (Espaces Collaboratifs) Démarrée 2508 ATTENTION: ce type de fonctionnement est peu permissif: tout changement dans le message fourni en entrée fera échouer sed (genre une mise à jour qui te repasse en anglais de message) Autre solution, plus simple, qui capture «Démarrée» ou «Arrêtée» sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' root@octopus:~# echo "Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr ... Démarrée (pid : 2508)"|sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' Démarrée Il y a 4 heures, jakol a écrit : J'ai effectivement posté la demande ailleurs...J'espère que vous ne le prenez pas mal.... Impardonnable. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ecatomb Posté(e) le 16 mars 2021 Partager Posté(e) le 16 mars 2021 La preuve on ne lui répond plus il y a une heure, jakol a écrit : 1) oui effectivement : head -1 statutCollab.txt > etat.txt | sed 's/.*/"Démarrée"/g' etat.txt "Démarrée" 2) oui je souhaiterais intégrer la ligne entière (sans couleur si ça plante) ou juste le mot "Démarré" ou "Arrêtée" (si l'appli plante). Merci pour tes réponses enrichissantes Ben ma commande fonctionne. Je n'ai toujours pas vu le résultat chez toi... Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 Il y a 39 minutes, brice.wernet a écrit : Exemple de capture d'info avec sed: pour faire la capture d'une partie de la ligne, il faut la «décrire» et entourer entre parenthèses les infos intéressantes on passe sed en mode «print» (/p à la fin) pour un peu plus de clarté (ou plutôt un peu moins d’obscurité), on utilise l’option -r de sed qui permet de ne pas mettres des caractères d’échappement partout --> sed -rn 's/Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$/\1 \2 \3/p' Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$: description de la ligne le premier (.*) va capturer le nom de l’appli avec les parenthèses (capture 1) le second (.*) suit les «...» du message mais précède «(pid :», ce sera donc «Démarrée» ou «Arrêtée» (avec les espaces avant par contre) le troisième (.*) capture le numéro de process tout le reste sert à «matcher» la ligne (notamment le $ à la fin qui signifie «fin de la ligne» pour caler l’interpréteur, j’aurais dû mettre un «^» au début pour caler le début \1 \2 \3: demande à sed d'afficher la capture 1, puis la 2, puis la 3 p: commande d’affichage du résultat echo "Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr ... Démarrée (pid : 2508)"|sed -rn 's/Statut de l'\''application (.*) sur .*\.\.\.(.*)\(pid :(.*)\).*$/\1 \2 \3/p' (Espaces Collaboratifs) Démarrée 2508 ATTENTION: ce type de fonctionnement est peu permissif: tout changement dans le message fourni en entrée fera échouer sed (genre une mise à jour qui te repasse en anglais de message) Autre solution, plus simple, qui capture «Démarrée» ou «Arrêtée» sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' root@octopus:~# echo "Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr ... Démarrée (pid : 2508)"|sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' Démarrée Impardonnable. 🐵 À l’instant, jakol a écrit : 🐵 lol Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 Merci la commande fonctionne Mais désolé je souhaiterais qu'il y ait le message dessous après le sed. Je cherche à comprendre mais pour te dire ça me paraît complexe... (Démarrée|Arrêtée) sont des variantes qui changent mais pas "Statut.....collab-app". Je n'arrête pas de le dire mais merci Statut de l'application (Espaces Collaboratifs) sur collab-app1.in.ac-strasbourg.fr Démarrée ou Statut de l'application (Espaces Collaboratifs) sur collab-app (il y a un app1 et un app2)Démarrée Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 16 mars 2021 Auteur Partager Posté(e) le 16 mars 2021 Statut de l'application (Espaces Collaboratifs) sur collab-app Démarrée Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 17 mars 2021 Auteur Partager Posté(e) le 17 mars 2021 Bonjour, j'ai fait un script qui marche #!/bin/sh initCollab=`./init/collab status >statutCollab.txt && sed 's/\x1b//g' statutCollab.txt |sed 's/\[1;32m//g'|sed 's/\[0;39m//g'` m="l'application collab est " messageCollab=`sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' statutCollab.txt ` echo "$initCollab"| mail -s "$m$messageCollab" toto@pluton.fr Le hic, c'est quand j'ouvre le mail, j'ai les codes suivants (dûs à messageCollab) Avez-vous une idée pour enlever ces messages? J'ai essayé de faire messageCollab=`sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' statutCollab.txt >autrefichier` mais la valeur (démarrée ou supprimée) n'est plus dans le titre du mail. Merci pour votre retour. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 17 mars 2021 Auteur Partager Posté(e) le 17 mars 2021 j'ai rajouté head messageCollab=`head -1 statutCollab.txt>etat.txt|sed -rn 's/.*(Démarrée|Arrêtée).*/\1/p' etat.txt Ca semble ok 😀 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 18 mars 2021 Auteur Partager Posté(e) le 18 mars 2021 Bonsoir, j'ai constaté que quand j'ai lancé le script lancé à partir de la console fonctionne nickel. Par contre, lorsque je le cron; les accents é ne sont pas reconnus lorsqu'il y a la réception du mail. Il n'y a pas non plus de message dans le corps du mail . 1) exécution directe du script--> réception du mail 2) cron du script --> réception du mail Je vous remercie de partager votre point de vue. Si possible, me guider pour une éventuelle solution. Bien cordialement Lien vers le commentaire Partager sur d’autres sites More sharing options...
brice.wernet Posté(e) le 19 mars 2021 Partager Posté(e) le 19 mars 2021 https://www.jbnet.fr/systeme/linux/envoyer-un-mail-avec-des-caracteres-accentues-a-partir-dun-script-sh.html Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.