RDV+DIAL chat illimit� dans ta r�g!
no save
Assistance
Achat
News

Forum | Linux/Unix
linux bash shell extraction de chaine
sbouli, le lun. 25 août 2008 à 13:11:32
Bonjour,

Je tente de developper un outil pour parser les logs postfix, je fais d'abord un


cat $D_LOGS/$v_fich | grep "status=bounced" > bounces.tmp


qui me permet de ne traiter que les bounces,

le but est d'écrire un fichier CSV à importer en bdd avec les champs :


nom_serveur, email, domaine, cause_bounce, date_badmail


un exemple de ligne du log est


Aug 20 08:57:00 serveurname postfix/smtp[1965]: 732DBD4C867: to=<toto.toto@wanadoo.fr>, relay=smtp.wanadoo.fr[193.252.22.78]:25, delay=0.1, delays=0.04/0/0.03/0.03, dsn=5.0.0, status=bounced (host smtp.wanadoo.fr[193.252.22.78] said: 550 <toto.toto@wanadoo.fr>: Recipient address rejected: User unknown (in reply to RCPT TO command))




Mon premier jet étais avec la commande sed sous la forme :

sed '/@/!d;s/^\(.*\)'$(hostname)'.*<\(.*@\(.*\)\)>.*bounced\(.*\)$/'$(hostname)'|\2|\3|\4|\1/' bounces.tmp >>$(hostname).csv




cependant, impossible d'obtenir une date correcte car l'année ne figure pas dans les logs et le format est un peu arbitraire ... ne pouvant facilement bricoler la date, j'ai changé mon fusil d'épaule en utilisant :


while IFS=$' ' read mois jour heure serveur process id destinataire relay delay delays dsn status infos
do
echo -e "
mois : $mois \n\
jour : $jour \n\
heure : $heure \n\
serveur : $serveur \n\
process : $process \n\
id : $id \n\
destinataire : $destinataire \n\
relay : $relay \n\
delay : $delay \n\
delays : $delays \n\
dsn : $dsn \n\
status : $status \n\
infos : $infos \n";
done < bounces.tmp





cependant, le champ destinataire est alors de la forme : to=<toto.toto@wanadoo.fr>, et pas seulement le mail ...

J'ai essayer de faire une fonction extract avec 3 paramètres, le premier la chaine, le second la chaine de debut (ici <) le troisième la chaine de fin (ici >) mais ça ne fonctionne pas ... :

extract()
{
local str deb fin temp
str="${1:-''}"
deb="${2:-'<'}"
fin="${3:-'>'}"
$temp = echo ${str#*$deb}
$temp2 = echo ${temp%*$fin}
return $temp2
}






Merci de me venir en aide soit en améliorant le sed pour pouvoir ajouter l'année (soit en cours soit l'année de création du fichier de log), soit en réussissant la fonction de découpe de chaine avec délimiteurs ...

A moins que vous n'ayez d'autre idées ?????

En vous remerciant

StéphaneConfiguration: Windows XP
Internet Explorer 7.0


jipicy
août 08
Suivant
REPONSES
jipicy
août 08
sbouli
août 08
sbouli
août 08
jipicy
août 08
sbouli
août 08
Version Web
Réalisé par RedShift
no save