Bonjour.
Je dois parser mon log de Postfix et sortir les mails bouncés. Il faut que je sorte le mail et la raison.
Voici à quoi ressemble une ligne :
Sep 9 09:27:14 fidji postfix/smtp[13495]: 8B9558825: to=, relay=mail.domain.fr[195.68.104.189], delay=4, status=bounced (host mail.domain.fr[195.68.999.999] said: 554 5.7.1 : Recipient address rejected: Access denied (in reply to RCPT TO command))
Je dois avec un script, sortir :
"xxxxxxx@domain.fr Recipient address rejected: Access denied (in reply to RCPT TO command)"
Donc, afficher ces deux champs, mais qui sont séparés dans le log, et exclure le reste.
Je sais afficher un champ précis, mais pas les deux en même temps.
Pour l'instant, j'utilise :
cat /var/log/mail.log | grep "status=bounced"|grep -o "to=<[^>]*>"| sed -e 's/to=<\(.*\)>/\1/'
Mais comment ajouter la dernière ligne à cette commande ? (dernière ligne qui est après le "said:")
Merci !
# awk ?
Posté par NeoX . Évalué à 2.
Sep 9 09:27:14 fidji postfix/smtp[13495]: 8B9558825: to=, relay=mail.domain.fr[195.68.104.189], delay=4, status=bounced (host mail.domain.fr[195.68.999.999] said: 554 5.7.1 : Recipient address rejected: Access denied (in reply to RCPT TO command))
awk -F: '{print $5 $6 $7}' fichier.log
ne te renvoie deja plus que
to=, relay=mail.domain.fr[195.68.104.189], delay=4, status=bounced (host mail.domain.fr[195.68.999.999] said 554 5.7.1 Recipient address rejected
[^] # Re: awk ?
Posté par Anonyme . Évalué à 1.
[^] # Re: awk ?
Posté par NeoX . Évalué à 2.
dans mon cas -F: pour utiliser : comme separateur plutot que l'espace
# sed, c'est dien
Posté par gaaaaaAab . Évalué à 3.
Un de tes problèmes ici est que ton grep -o restreint ta ligne à ce qui correspond à ton motif, et ton motif actuel exclut ce qui se trouve après > (donc ce qu'il y a après le said)
sed -ne 's/.*to=<\([^>]*\)>.*status=bounced.*said:[^:]*:/\1/p' /var/log/mail.log
concernant le motif commençant à "said", je m'appuie sur ton exemple car je ne connais pas le format général d'une ligne de bounced. Il faut potentiellement généraliser pour traiter les lignes qui ne serait pas du genre "said: du blablabla : le texte que tu veux"
[^] # Re: sed, c'est dien
Posté par Anonyme . Évalué à 2.
Mais, bizarrement, quand je lance cette commande, ça me sort beaucoup moins d'enregistrement que ce qu'il y a en vrai.
cat /var/log/mail.log | grep "status=bounced" me sort 31 lignes actuellement, alors que
sed -ne 's/.*to=<\([^>]*\)>.*status=bounced.*said:[^:]*:/\1/p' /var/log/mail.log ne va m'en sortir que 10. Sacrée différence ! :-)
J'ai pourtant bien un 'status=bounced' et un 'said' dans chacune de mes lignes..
[^] # Re: sed, c'est dien
Posté par Anonyme . Évalué à 2.
Sep 9 11:52:06 fidji postfix/smtp[26818]: 698448125: to=<xxxxxxxxxxx@laposte.net>, relay=smtp4.laposte.net[193.251.214.xxx, delay=1, status=bounced (host smtp4.laposte.net[193.251.214.xxx] said: 550 <xxxxxxxx@laposte.net>: Recipient address rejected: User unknown (in reply to RCPT TO command))
Mais ça va bien me sortir ces lignes là :
Sep 9 09:27:13 fidji postfix/smtp[29268]: D6E4C8836: to=<xxxxxxxxx@xxxxxx.fr>, relay=mail.xxxxx.fr[80.13.123.xxxx], delay=8, status=bounced (host mail.xxxxx.fr[80.13.123.xxx] said: 550 5.1.1 User unknown (in reply to RCPT TO command))
Comme si les <> présents dans la ligne après "said" posaient problème
(pfiou c'est chaud sed, j'suis en train de lire, quand je vois tes lignes, je pleure)
[^] # Re: sed, c'est dien
Posté par gaaaaaAab . Évalué à 3.
de ce que je vois dans tes deux lignes, la première correspond le motif "said: blabla : d'autres trucs" tandis que la seconde est "said: blabla". Or la regex de mon commentaire s'appuyait sur la présence d'une seconde occurence du caractère ":".
C'est ce que je signalais dans mon commentaire précédent, il faut regarder tous les formats possibles après le said pour établir une regex qui matchera à tous les coups.
Fais un:
grep "status=bounced" /var/log/mail.log |grep -o "said.*"
En partant des résultats de ce grep, tu pourras essayer d'établir une regex qui découpe ce motif à ta convenance, et la ré injecter dans le sed initial.
[^] # Re: sed, c'est dien
Posté par Anonyme . Évalué à 1.
Sep 9 11:52:06 server postfix/smtp[26818]: 698448125: to=<xxxxxxxxxxx@laposte.net>, relay=smtp4.laposte.net[193.251.214.xxx, delay=1, status=bounced (host smtp4.laposte.net[193.251.214.xxx] said: 550 <xxxxxxxx@laposte.net>: Recipient address rejected: User unknown (in reply to RCPT TO command))
Sep 9 09:27:13 server postfix/smtp[29268]: D6E4C8836: to=<xxxxxxxxx@xxxxxx.fr>, relay=mail.xxxxx.fr[80.13.123.xxxx], delay=8, status=bounced (host mail.xxxxx.fr[80.13.123.xxx] said: 550 5.1.1 User unknown (in reply to RCPT TO command))
Et j'arrive vraiment pas à modifier cette regex avec sed pour qu'elle match les deux :-(
[^] # Re: sed, c'est dien
Posté par Anonyme . Évalué à 1.
sed -ne 's/.*to=<\([^>]*\)>.*status=bounced.*said:*:/\1/p' /va
semble déjà mieux marcher !r/log/mail.log
[^] # Re: sed, c'est dien
Posté par zecrazytux (site web personnel) . Évalué à 2.
# création facile de regex
Posté par palm123 (site web personnel) . Évalué à 2.
http://txt2regex.sourceforge.net/
ウィズコロナ
# pflogsumm ?
Posté par Patrick Lamaizière (site web personnel) . Évalué à 4.
Grand Totals
------------
messages
470 received
483 delivered
0 forwarded
0 deferred
1 bounced
554 rejected (53%)
14 reject warnings
0 held
0 discarded (0%)
[...]
message deferral detail: none
message bounce detail (by relay)
--------------------------------
mail2.akka.fr[195.167.225.220]:25 (total: 1)
1 <> sender cannot be empty (in reply to MAIL FROM command)
les pixels au peuple !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.