Bonjour,
Dans mon log de Postfix, j'ai besoin d'afficher les adresses mails qui m'ont générés un bounce.
Bon un petit cat /var/log/mail/postfix | grep "status=bounced" fonctionne. Mais ça me retourne la ligne entière. J'aimerais afficher uniquement ce qu'il y a écrit entre "to=<" et ">", qui correspond au mail.
Au début, je voulais procéder avec un cut -d' ' -f7 ou un awk '{print $7'} mais le numéro du champ peut bouger des fois, et donc, je me retrouve avec un champ qui ne correspond à ce que je veux.
Je vois que sed/awk peuvent faire ça, mais je n'ai aucune idée du fonctionnement.
Si vous avez un exemple, ça serait parfait !
Merci beaucoup.
# Un exemple
Posté par kowalsky . Évalué à 2.
[^] # Re: Un exemple
Posté par Anonyme . Évalué à 1.
J'aimerais extraire la chaine username@uahoo.com. En gros, sortir la chaine après "to=<" et avant ">".
Merci !
[^] # Re: Un exemple
Posté par mekare . Évalué à 1.
gawk -F"," '{$1=gensub("(.*)to=<(.*)@(.*)>","\\2@\\3",1,$1); if ($0 ~ "status=bounced") print $1}' /var/log/ton_fichier_postfix.log
Mais c'est peut-être plus simple avec le "grep -o" mentionné dans les posts ci-dessous.
[^] # Re: Un exemple
Posté par kowalsky . Évalué à 2.
[^] # Re: Un exemple
Posté par mekare . Évalué à 1.
[^] # Re: Un exemple
Posté par gaaaaaAab . Évalué à 2.
Et puis, plus y a de solutions proposées, mieux c'est (mon petit côté Perl ;)
Sinon, c'est aussi possible de remplacer le syslog fichier par un syslog qui stocke en DB. Ensuite, trouver l'info de départ, c'est un simple SELECT dans la dite DB
[^] # Re: Un exemple
Posté par kowalsky . Évalué à 3.
Je vous rassure, c'est pas une guerre :)
Tu dis ça parce que tu as gagné :)
[^] # Re: Un exemple
Posté par gaaaaaAab . Évalué à 2.
# sed, grep, awk
Posté par gaaaaaAab . Évalué à 3.
$ echo "blablabla to=<addr1@machin.truc> bliblibli to=<addr2@truc.bidule>" > fichier
$ grep -o "to=<\([^>]*\)>" fichier
to=<addr1@machin.truc>
to=<addr2@truc.bidule>
Ensuite, yapuka (c) enlever les petits morceaux qui traînent avec l'outil de ton choix. Par exemple en pipant dans un sed du genre
(...) | sed -e 's/to=<\(.*\)>/\1/'
En sed pur, on peut aussi faire des trucs, mais c'est un peu moins lisible, et la solution que j'ai ne peut traiter qu'une seul adresse par ligne (ce qui à priori n'est pas trop grave pour ton cas mais bon :)
sed -ne '/to=</,/>/ s/.*to=<\(.*\)>.*/\1/p' fichier
pour en savoir plus sur sed:
http://www.commentcamarche.net/faq/478-sed
http://www.grymoire.com/Unix/Sed.html
[^] # Re: sed, grep, awk
Posté par gaaaaaAab . Évalué à 3.
grep -o "to=<[^>]*>" fichier
[^] # Re: sed, grep, awk
Posté par Anonyme . Évalué à 1.
Eh bien merci !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.