Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
865 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [UNIX/Lunix] SED avancé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[UNIX/Lunix] SED avancé

n°2145806
chico008
what the wookie says ?
Posté le 14-06-2012 à 13:18:53  profilanswer
 

Bonjour,  
 
Pour les besoin d'un script, qui envera un CR par mail, j'ai besoin de proceder a un remplacement de flag dans un modèle par le contenue d'un fichier.
 
par exemple.
j'ai mon script qui tourne, et à la fin envoie un mail.
Pour faire plus simple, j'ai preparer 2 modèle, un pour dire OK, l'autre KO avec des details.
 
dans le modèle de mail KO, j'ai, un flag que j'aimerais remplacer par une mini log
 
ex, mon modèle mail_KO

Code :
  1. ===========
  2. =   ERREUR   =
  3. ===========
  4. Contenue de la log :
  5. [LOG]
  6. ===========


 
Contenue de ma log (pour test)

Code :
  1. Erreur ligne 12 : Fichier manquant


 
j'ai essayer avec un truc type :
sed 's/\[LOG\]/'"$(cat log)"'/' mail_KO
mais ca ne fonctionne pas :
sed: -e expression n°1, caractère 15: commande `s' inachevée
 
Si j'essaie la substitution avec une variable simple contenant un seul mot, ca marche,  

Code :
  1. VAR=TOTO
  2. sed 's/\[LOG\]/'"$VAR"'/' mail_KO


j'ai bien TOTO à la place de [LOG]
mais dès que ca contient une phrase, ca marche plus.
 
Si vous avez une idée ;)


---------------
Serveur HFR - OpenTTD
mood
Publicité
Posté le 14-06-2012 à 13:18:53  profilanswer
 

n°2145810
Nukolau
Posté le 14-06-2012 à 13:38:35  profilanswer
 

Avec un sed, je ne sais pas si c'est possible, je crains que les retours à la ligne et que certains caractères qui pourraient être contenu dans ta log te pose des problèmes. Sinon je pense que ton problème actuel vient des ' qui protège le sed. Essaie avec des " a la place :
 
sed "s/[LOG]/$(cat log)/" mail_KO  
 
Mais comme dit, je crains que tu n'aies des soucis en fonction de ce qu'il y a dans log ... Du coup, pour répondre à ton besoin je vois les solutions simples suivantes :
 
- Tu découpes ton modèle en deux parties, une "entete" et une "pied_de_page". Pour ton mail tu fais un "cat entete log pied_de_page"
- Ton mail reste aussi court que décrit au dessus, auquel cas tu ne passe pas par un modèle externe, tu le mets directement dans ton script qui génère le mail
- Tu parses ton modèle en le lisant ligne a ligne jusqu’à rencontrer la ligne contenant [LOG] que tu n'affiche pas dans ton mail, mais que tu remplace par un cat de ta log, puis tu fini ton modèle.
 
C'est bourrin, et il y a sûrement mieux à faire, peut-être avec awk, ou split, à voir ^^

n°2145813
chico008
what the wookie says ?
Posté le 14-06-2012 à 13:41:47  profilanswer
 

je pensait à ta solution n°2 effectivement,  
qui est la plus simple je pense.
 
moi qui pensait avoir une bonne idée en utilisant un modèle.
Fausse bonne idée.
 
Merci
 
 
en attendant, si d'autres ont des idées, je suis toujours preneur.


---------------
Serveur HFR - OpenTTD
n°2145870
Profil sup​primé
Posté le 14-06-2012 à 19:17:23  answer
 

salut,
 

Code :
  1. sed '/\[log\]/{r/home/chico/log.err
  2. d}' mail.modele

bien protéger les crochets, sinon sed va croire que c'est une séquence de caractères (man regex)
n'oublie pas de passer à la ligne après le nom du fichier log.

n°2146021
chico008
what the wookie says ?
Posté le 16-06-2012 à 08:14:17  profilanswer
 

j'essaierais lundi au boulot, je te tient au courant.


---------------
Serveur HFR - OpenTTD

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [UNIX/Lunix] SED avancé

 

Sujets relatifs
[SHELL UNIX] Fermer le terminal a la fin d un script shell[Shell Unix] Trace dans console + log
Shell Unix : Extraire une valeur d'un fichierOpencv sous Unix
[Shell/Unix] Equivalence à "grep -v"[Shell/Unix] Tableaux
[Shell/Unix] Reactualisation de variable dans une boucleScript TELNET Unix vers Windows
[Shell Unix] Active trace exeuction dans les fonctions[Shell UNIX] Recherche dans une ligne
Plus de sujets relatifs à : [UNIX/Lunix] SED avancé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR