[UNIX/Lunix] SED avancé

SED avancé [UNIX/Lunix] - Shell/Batch - Programmation

Marsh Posté le 14-06-2012 à 13:18:53    

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
Reply

Marsh Posté le 14-06-2012 à 13:18:53   

Reply

Marsh Posté le 14-06-2012 à 13:38:35    

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 ^^

Reply

Marsh Posté le 14-06-2012 à 13:41:47    

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
Reply

Marsh Posté le 14-06-2012 à 19:17:23    

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.

Reply

Marsh Posté le 16-06-2012 à 08:14:17    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed