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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  traitement d'un fichier de retour d'email d'erreur avec SED

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

traitement d'un fichier de retour d'email d'erreur avec SED

n°937174
mastoc34
Posté le 25-07-2007 à 10:25:42  profilanswer
 

Bonjour,
je suis devant un petit soucis, en effet je me retrouve avec des fichier de retour d'email d'erreur assez important aprés un mailing sur nos client.
 
je souhaite faire un traitement autoomatique du fichier pour aporés faire un update des adresses en erreur dans ma base de données oracle.
 
 
1- j'ai donc un fichier de daprt classique d'email en reception Postfix.
2- je souhaite isoler les lignes Final-Recipient: et Diagnostic-code:+ la ligne suivante (souvent la fin du message)
 
 
j'ai donc ecrit un script sed:
 
/^Final-Recipient/ {
 p
}
/^Diagnostic/ {
  p
  n
  p
}
 
seulement voila, je ne sais pas comment enlever le retour chariot a la fin de ma première ligne Diagnostic-code: pour la concatener avec la suivante...
 
Pouvez-vous m'aider.
 
ps:- si vous avez des infos pour de la doc complete sed je suis preneur.
    - je suis DBA Oracle et je travaille sous Redhat LINUX ES
 
 
 

mood
Publicité
Posté le 25-07-2007 à 10:25:42  profilanswer
 

n°937177
mastoc34
Posté le 25-07-2007 à 10:49:25  profilanswer
 

je n'arrive toujours pas a concatener la ligne commencant par diagno. et la suivante...
 
Voila mon script:
 
/^Final-Recipient/ {
 p #affichage
}
/^Diagnostic/ {
  h
  p
  #x
  #s/\n/ /g        #supr les retours ligne
  n  #ligne suivante dans pattern space
  H
  p
}
 
 
voila le resultat:
Final-Recipient: rfc822; sstahl@club-internet.fr
Diagnostic-Code: smtp; 552 La boite de votre correspondant
    sstahl@club-internet.fr est pleine, mailbox is temporarily over quota

n°937192
mastoc34
Posté le 25-07-2007 à 11:29:26  profilanswer
 

j'ai bien une idée avec ca :
-> Si une ligne commence par un signe égale (=), ajouter-là à la ligne précédente et remplacer le signe égale (=) par un espace  
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
 
comme ma ligne suivante commence toujours par 4 espace mais j'y arrive pas...

n°937225
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 25-07-2007 à 13:46:18  profilanswer
 

Un peu de doc : http://www.grymoire.com/Unix/Sed.html


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°937407
mastoc34
Posté le 26-07-2007 à 09:00:33  profilanswer
 

Merci.
 
au fait y a pas un endroit sur le forum ou l'on peut se presenter !
 

n°937410
franceso
Posté le 26-07-2007 à 09:11:37  profilanswer
 

mastoc34 a écrit :

Merci.
 
au fait y a pas un endroit sur le forum ou l'on peut se presenter !
 


 [:zytra]  
 
http://forum.hardware.fr/hfr/OSAlt [...] 4456_1.htm


---------------
TriScale innov
n°937449
mastoc34
Posté le 26-07-2007 à 11:01:24  profilanswer
 

personne a une solution pour concatener mes lignes...je seche :(
 
Final-Recipient: rfc822; sstahl@club-internet.fr  
Diagnostic-Code: smtp; 552 La boite de votre correspondant  
    sstahl@club-internet.fr est pleine, mailbox is temporarily over quota  
 
donnerais :
Final-Recipient: rfc822; sstahl@club-internet.fr  
Diagnostic-Code: smtp; 552 La boite de votre correspondant sstahl@club-internet.fr est pleine, mailbox is temporarily over quota  

n°937456
blaireau o​ne
Posté le 26-07-2007 à 11:20:34  profilanswer
 

mastoc34 a écrit :

personne a une solution pour concatener mes lignes...je seche :(
 
Final-Recipient: rfc822; sstahl@club-internet.fr  
Diagnostic-Code: smtp; 552 La boite de votre correspondant  
    sstahl@club-internet.fr est pleine, mailbox is temporarily over quota  
 
donnerais :
Final-Recipient: rfc822; sstahl@club-internet.fr  
Diagnostic-Code: smtp; 552 La boite de votre correspondant sstahl@club-internet.fr est pleine, mailbox is temporarily over quota  


 
 
Solution avec "awk"  http://www.shellunix.com/awk.html  :)  

Code :
  1. awk '
  2. {
  3. if ($0 ~ /^Final-Recipient:/) {
  4.  print $0
  5. }
  6. if ($0 ~ /^Diagnostic-Code:/) {
  7.  printf("%s",$0)
  8.  getline
  9.  print $0
  10. }
  11. } ' Fichier_a_traiter.log


 

n°937462
mastoc34
Posté le 26-07-2007 à 11:45:59  profilanswer
 

ok je vais le tester mais j'aurai bien aimé comprendre comment faire avec sed..
 

n°937617
enfoiro
a nickname is just a nickname
Posté le 26-07-2007 à 17:41:22  profilanswer
 

pour sed il faut regarder les caractères spéciaux afin de concaténer les chaines.
par exemple retour chariot c'est \n
si ca peut aider...

mood
Publicité
Posté le 26-07-2007 à 17:41:22  profilanswer
 

n°937831
mastoc34
Posté le 27-07-2007 à 10:49:33  profilanswer
 

J'ai trouvé:
 
/^Final-Recipient/ {
 p #affichage
}
/^Diagnostic/ {
  N    #concat current line et next avec un /n
  s/   //g #effacement des 4 espace  
  s/\n//g  #effacement retour ligne entre current et next
  p  #affichage ligne en cours
}
 
 
Merci Xavier_OM c'est grace a ta doc.

n°937833
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 27-07-2007 à 10:57:59  profilanswer
 

mastoc34 a écrit :

J'ai trouvé:
 
/^Final-Recipient/ {
 p #affichage
}
/^Diagnostic/ {
  N    #concat current line et next avec un /n
  s/   //g #effacement des 4 espace  
  s/\n//g  #effacement retour ligne entre current et next
  p  #affichage ligne en cours
}
 
 
Merci Xavier_OM c'est grace a ta doc.


 
de rien ;)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°937835
mastoc34
Posté le 27-07-2007 à 11:02:20  profilanswer
 

ouai en fait je concatenais bien ma current et la next mais la concaténation rajoutais un /n
 
c'etait sioux.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  traitement d'un fichier de retour d'email d'erreur avec SED

 

Sujets relatifs
Firefox : pb ouverture dossier contenant d'un fichier téléchargé...scrip shell - remplacer une ligne dans un fichier
Question bete à propos des nom de fichier linux-source...Extraire une partie d'un fichier audio
[Apache-PHP] Propriétaire de fichier changeantfichier bin
Recherche fichier status pour dpkgfichier endommage
Rediriger les messages au boot dans un fichierErreur Joomla 1.0.12.
Plus de sujets relatifs à : traitement d'un fichier de retour d'email d'erreur avec SED


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