traitement d'un fichier de retour d'email d'erreur avec SED - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 25-07-2007 à 10:49:25
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
Marsh Posté le 25-07-2007 à 11:29:26
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...
Marsh Posté le 25-07-2007 à 13:46:18
Un peu de doc : http://www.grymoire.com/Unix/Sed.html
Marsh Posté le 26-07-2007 à 09:00:33
ReplyMarsh Posté le 26-07-2007 à 09:11:37
mastoc34 a écrit : Merci. |
http://forum.hardware.fr/hfr/OSAlt [...] 4456_1.htm
Marsh Posté le 26-07-2007 à 11:01:24
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
Marsh Posté le 26-07-2007 à 11:20:34
mastoc34 a écrit : personne a une solution pour concatener mes lignes...je seche |
Solution avec "awk" http://www.shellunix.com/awk.html
Code :
|
Marsh Posté le 26-07-2007 à 11:45:59
ok je vais le tester mais j'aurai bien aimé comprendre comment faire avec sed..
Marsh Posté le 26-07-2007 à 17:41:22
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...
Marsh Posté le 27-07-2007 à 10:49:33
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.
Marsh Posté le 27-07-2007 à 10:57:59
mastoc34 a écrit : J'ai trouvé: |
de rien
Marsh Posté le 27-07-2007 à 11:02:20
ouai en fait je concatenais bien ma current et la next mais la concaténation rajoutais un /n
c'etait sioux.
Marsh Posté le 25-07-2007 à 10:25:42
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