Extraire plusieurs chaines de caractères

Résolu
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
Configuration: Windows XP Internet Explorer 6.0

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    0
  2. maya79
     
    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.
    0
  3. lami20j
     
    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
    0
    1. maya79
       
      bonjour et merci également.

      Néanmoins grep ne reconnait pas l'option -o, qu'est-elle sensée faire ?
      0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    0
    1. lami20j
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    $ 
    
    0
    1. maya79
       
      Bonjour et grand merci,

      cette solution via Perl marche du tonnerre.
      Je ne connais pas du tout Perl, dommage mais au moins ça fonctionne.

      Merci
      0