Extraire plusieurs chaines de caractères
Résolu
maya79
-
maya79 -
maya79 -
Bonjour,
Par un shell Unix, j'essaie d'extraire depuis un fichier ou une variable toutes les adresses mails présentes :
ex :
To: "Support, De test" <support-detest@mondomaine.com>, maya79@mondom2.fr
CC: "Berthier, Marcel" <m.berthier@mondomaine.com>,
"Barbotin, Paulo"
<paul.barbotin@mondomaine.fr>,
"Le Bec, De lievre" <delievre.lebec@mondomaine.com>,
"Bellenger, Lucette" <l.bellenger@mondomaine.com>
Résultat attendu : support-detest@mondomaine.com maya79@mondom2.fr m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com
J'ai essayé par un sed pour me débarrasser des chaines de caractères délimités par un espace mais qui ne contient pas le caractère "@", en vain.
J'accepte toute proposition
Merci d'avance
Par un shell Unix, j'essaie d'extraire depuis un fichier ou une variable toutes les adresses mails présentes :
ex :
To: "Support, De test" <support-detest@mondomaine.com>, maya79@mondom2.fr
CC: "Berthier, Marcel" <m.berthier@mondomaine.com>,
"Barbotin, Paulo"
<paul.barbotin@mondomaine.fr>,
"Le Bec, De lievre" <delievre.lebec@mondomaine.com>,
"Bellenger, Lucette" <l.bellenger@mondomaine.com>
Résultat attendu : support-detest@mondomaine.com maya79@mondom2.fr m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com
J'ai essayé par un sed pour me débarrasser des chaines de caractères délimités par un espace mais qui ne contient pas le caractère "@", en vain.
J'accepte toute proposition
Merci d'avance
Configuration: Windows XP Internet Explorer 6.0
5 réponses
-
Je ferais un grep (en passant l'expression permettant de rattraper une adresse mail) cut sur le séparateur < (prendre le champ 2) et un cut sur le séparateur > (prendre le champ 1. Dans l'idée ça ressemble à ça (sur la même ligne) :
grep "[a-zA-Z0-9.\-]*@[a-zA-Z0-9.\-]*" /le/chemin/vers/le/fichier.txt | cut -d'<' -f2 | cut -d'>' -f1
(à tester)
Bonne chance -
Merci mamiemando,
Effectivement ca marche en grande partie mais je ne récupère qu'une adresse mail par ligne. Dans mon exemple, on perd l'adresse maya79@mondom2.fr.
D'où l'idée de faire un découpage sur le caractère espace mais je sèche toujours. -
Salut,
lami20j@debian:~$ cat mail.txt To: "Support, De test" <support-detest@mondomaine.com>, maya79@mondom2.fr CC: "Berthier, Marcel" <m.berthier@mondomaine.com>, "Barbotin, Paulo" <paul.barbotin@mondomaine.fr>, "Le Bec, De lievre" <delievre.lebec@mondomaine.com>, "Bellenger, Lucette" <l.bellenger@mondomaine.com> lami20j@debian:~$ grep "[a-zA-Z0-9.\-]*@[a-zA-Z0-9.\-]*" mail.txt | cut -d'<' -f2 | cut -d'>' -f1 support-detest@mondomaine.com m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com lami20j@debian:~$ lami20j@debian:~$ lami20j@debian:~$ lami20j@debian:~$ lami20j@debian:~$ grep -o "[a-zA-Z0-9.\-]*@[a-zA-Z0-9.\-]*" mail.txt support-detest@mondomaine.com maya79@mondom2.fr m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com
-
Apparemment ça marche pas si mal :-) De toute façon d'un point de vue expression régulière, ce que j'ai mis est sensé rattraper maya79@mondom2.fr aussi. L'expression régulière que j'ai écrite signifie "une suite de 0 à n caractères parmi a...z A...Z 0...9 . et -, une @, et à nouveau une suite de 0 à n caractères parmi a...z A...Z 0...9 . et -.
Tu es sûr que l'adresse mail que tu ne récupères pas respecte bien cette expression régulière ?
Bonne chance-
Salut,
ce que j'ai mis est sensé rattraper maya79@mondom2.fr aussi.
Oui, et ça le fait ;-)
C'est le cut qui perd en chemin maya79@....fr puisque cette adresse n'est pas entouré par des chevrons < et >
~$ cat mail.txt To: "Support, De test" <support-detest@mondomaine.com>, maya79@mondom2.fr CC: "Berthier, Marcel" <m.berthier@mondomaine.com>, "Barbotin, Paulo" <paul.barbotin@mondomaine.fr>, "Le Bec, De lievre" <delievre.lebec@mondomaine.com>, "Bellenger, Lucette" <l.bellenger@mondomaine.com>
1er cut
~$ cat mail.txt|grep "[a-zA-Z0-9.\-]*@[a-zA-Z0-9.\-]*" |cut -d'<' -f2
support-detest@mondomaine.com>, maya79@mondom2.fr
m.berthier@mondomaine.com>,
paul.barbotin@mondomaine.fr>,
delievre.lebec@mondomaine.com>,
l.bellenger@mondomaine.com>
2ème cut~$ cat mail.txt|grep "[a-zA-Z0-9.\-]*@[a-zA-Z0-9.\-]*" |cut -d'<' -f2| cut -d'>' -f1 support-detest@mondomaine.com m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
hello
$ cat a3 To: "Support, De test" <support-detest@mondomaine.com>, maya79@mondom2.fr CC: "Berthier, Marcel" <m.berthier@mondomaine.com>, "Barbotin, Paulo" <paul.barbotin@mondomaine.fr>, "Le Bec, De lievre" <delievre.lebec@mondomaine.com>, "Bellenger, Lucette" <l.bellenger@mondomaine.com> $ $ perl -wne'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}' a3 support-detest@mondomaine.com maya79@mondom2.fr m.berthier@mondomaine.com paul.barbotin@mondomaine.fr delievre.lebec@mondomaine.com l.bellenger@mondomaine.com $