Recuperer des adresses mail dans un fich txt

Résolu
Stef60 Messages postés 257 Statut Membre -  
Stef60 Messages postés 257 Statut Membre -
Bonjour,
j'ai besoin d'aide.
voici mon probleme:
j'ai un fichier texte de ce type:
[debut]

aaa = toto@ccm.fr,titi@ccm.fr,tutu@ccm.fr
zebrvz = azor@ccm.fr,tutu@ccm.fr,youpi@ccm.fr
fgsdgf = sdgs@cc.fr,riri@yahou.com

[fin]

-------------------------------------------------------------

j'ai besoin de recuperer uniquement les adresses mail pour pouvoir creer une liste de diffusion (donc separé par des virgules)

j'ai créé des batchs mais quand je les enchaines, je me retrouve avec un fichier vide.

je n'y connais pas grand chose, donc si vous pouviez m'orienter.
Merci

30 réponses

  • 1
  • 2
Résumé de la discussion

Le fil porte sur l’extraction d’adresses mails d’un fichier texte structuré par des balises [debut] et [fin], afin de constituer une liste de diffusion séparée par des virgules. Plusieurs réponses proposent des méthodes en ligne de commande (grep, sed) pour isoler les adresses au format nom@ccm.fr, en gérant les balises et en arrêtant la capture avant des marqueurs comme [Initiation1]. Des difficultés apparaissent lorsque le fichier est enchaîné et que le script produit un fichier vide, avec mails répétés ou marqueurs indésirables; certains proposent Excel pour convertir en tableau, d’autres cherchent un script shell fiable. D’autres précisent que le fichier est modifié manuellement et que l’automatisation du processus demeure l’objectif pour gérer le volume croissant.

Bobot (l'IA à votre service)
  1. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    bah pourquoi pas utiliser excel ou open office table pour en faire un tableau que tu pourrais definir automatiquement au virgule et apres tu pourra repasser ca plus facilement en liste. Enfin c est qu une idée a tester.
    0
  2. Stef60 Messages postés 257 Statut Membre 41
     
    C'est une bonne idée.
    J'avais ca la premiere fois. ca m'a pris 1h30.
    Dans mon exemple y'a 10 adresses, en vrai, il y en a 300.
    Comme ce fichier change souvent, je dois automatiser le processus.
    je precise que mon ficher se trouve sur un serveur linux (subversion)
    et donc j'ai essayé de faire un script en shell (sh) mais c'est compliqué (enfin pour moi)
    0
  3. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    ce fichier txt il est generé par quoi a la base ??
    0
  4. Stef60 Messages postés 257 Statut Membre 41
     
    J'ai essayé avec sed
    avec une boucle while
    ca coince toujours
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Stef60 Messages postés 257 Statut Membre 41
     
    le fichier texte n'est generé par rien.
    il est modifié manuellement.
    En fait, en ajoutant les adresses mail, on autorise l'accés au projet (ce qu'il y a avant le = )
    0
  7. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    je sais que la question est "c.." mais il y a beaucoup de projets ? et te faut il une liste de diffusion par liste ou une global et si une global je suppose qu il faut gerer les doublon ?
    0
  8. Stef60 Messages postés 257 Statut Membre 41
     
    oui il y'a beaucoup de projet, 50 environ.
    On me demande une liste de diff globale (pour l'instant)
    mais je suis aussi preneur pour une liste par projet ( :-)

    Pour les doublons, cela serait un plus de les supprimer via le script.
    Mais a vrai dire, Lotus Notes peut s'en charger.

    Pour la petite histoire, on me demande ca car le serveur est tomber en panne lundi.
    Et evidemment on avait de liste de diff pour avertir les utilisateurs.
    Et on ne pouvait meme pas en créér une puisque les comptes des utilisateurs sont dans ce fichier.
    0
  9. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    Ce que j ai du mal a comprendre c est que je vois pas pourquoi ne pas le faire via un simple bloc note c est vrai que ca peut etre long mais en etant honnete tu n as que 50 fois a remplacer "aaa =" par une virgule pour que ton fichier soit bon mais j ai tout de meme cherché un peu et du cou j ai trouvé un soft qui peut t interresser.
    Net Tools
    Voila tu as dedans une option qui s appelle Local email extractor pour la trouver une fois le soft lancé tape sur F3 et cherche extract elle serra dans la liste.
    0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    L'espace entres les deux crochets "[ [" doit être enlevé "[[", il n'est mis ici que pour empêcher l'interprétation du code...
    grep -o '[ [:alnum:]]*@[ [:alnum:]]*.[ [:alpha:]]*' fichier.entrée | sed -e ':a ; N ; $!b a ;s/\n/,/g' > fichier.sortie
    ;-))
    0
  11. Stef60 Messages postés 257 Statut Membre 41
     
    wkm,
    comme je te l'ai dit, ta methode fonctionne c'est certain.
    Mais comme je suis tetu, que je veux apprendre le shell et que la bidouille manuelle ce n'est pas professionnelle
    je veux reussir un script sh.

    jipicy:
    ta commande marche pas mal meme si je comprend pas tout.
    mais le resultat ne me convient pas.
    j'aurai peut-etre du dire que j'ai des adresses mail du type thierry-externe.henry@ccm.com

    de plus, il faut que le script s'arrete avant [fin] car sinon il interprete le reste du fichier
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      grep -o '[[:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*' fichier.entrée | sed -e ':a ; N ; $!b a ;s/\n/,/g' > fichier.sortie

      de plus, il faut que le script s'arrete avant [fin] car sinon il interprete le reste du fichier
      Où ?
      0
  12. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    j ai bien compri Stef60, d ailleur moi aussi il faudrait que je me repanche un peu sur le script mais je ne fasais que te donner le nom d'un soft qui a certainement beaucoup de fonction que tu peu rechercher un jour. Et qui en plus fait tout seul ce que tu cherchais.
    Sur ces mots bon courage dans ton apprentissage.
    0
  13. Stef60
     
    je met un reel exemple du fichier:
    -------------------------------------------------------------------------
    [groups]

    Adm = thierry-externe.henry@ccm.com,zinedine-externe.zizou@ccm.com,michel.platini@ccm.com
    Initiation1 = samir-externe.nasri@ccm.com,karim.benzema@ccm.com
    projetTestW = karim.benzema@ccm.com
    projetTestR =
    projettest2R =
    projettest2W = nicolas.anelka@ccm.com

    [Initiation1:/]
    @Adm = rw
    @Initiation1 = r
    @Initiation1 = r
    * =

    [Initiation1:/Trunk/toto]
    thierry-externe.henry@ccm.com = rw
    * =

    [projetTest:/]
    @projetTestW=r
    @projetTestR=r
    @adm=r
    * =
    ------------------------------------------------fin du fichier

    j'ai besoin de recuperer les mails situés entre [groups] et [Initiation1:/]
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      sed -n '/\[groups\]/,/\[Initiation1/p' fich.in |\
      grep -o '[[:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*'|\
      sed -e ':a ; N ; $!b a ;s/\n/,/g' > fich.out
      ;-))
      0
  14. Stef60
     
    pas de probleme wkm
    c'est sympa de ta part.

    A bientot peut etre
    0
  15. wkm Messages postés 506 Date d'inscription   Statut Membre Dernière intervention   105
     
    bah si je retrouve mais vieux baths voui je repasserais te donner un exemple.
    A+
    0
  16. Stef60
     
    j'ai mis un exemple concret du fichier a traiter

    voici le resultat que j'obtiens avec ta commande:

    henry@ccm.com,zizou@ccm.com,platini@ccm.com,nasri@ccm.com,benzema@ccm.com,benzema@ccm.com,anelka@ccm.com,@Adm ,@Initiation1 ,@Initiation1 ,henry@ccm.com,@projetTestW=r,@projetTestR=r,@adm=r

    or, je veux que le script s'arrete avant [Initiation1:/] sinon il affiche des mails qui n'existent pas (@adm,@Initiation1....)
    0
  17. Stef60
     
    ca fonctionne (en tout cas sur le fichier exemple).

    tu peux m'expliquer a quoi sert | ?
    visiblement a enchainer les commandes ??

    en tout cas merci.
    et je repasse demain pour plus d'info.

    Bonne soirée
    0
  18. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tu peux m'expliquer a quoi sert | ?
    visiblement a enchainer les commandes ??

    Exact, voir à ce sujet : guide d utilisation du shell pour debutant#les pipelines

    ;-))
    0
  19. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    $ cat stef2
    [groups]
    
    Adm = thierry-externe.henry@ccm.com,zinedine-externe.zizou@ccm.com,michel.platini@ccm.com
    Initiation1 = samir-externe.nasri@ccm.com,karim.benzema@ccm.com
    projetTestW = karim.benzema@ccm.com
    projetTestR =
    projettest2R =
    projettest2W = nicolas.anelka@ccm.com
    
    [Initiation1:/]
    @Adm = rw
    @Initiation1 = r
    @Initiation1 = r
    * =
    
    [Initiation1:/Trunk/toto]
    thierry-externe.henry@ccm.com = rw
    * =
    
    [projetTest:/]
    @projetTestW=r
    @projetTestR=r
    @adm=r
    * =
    $ perl -ne 'if (1../\[Initiation/){s/.*=\s*//;s/,/\n/g;print if /\@/}' stef2 > adresse
    $ cat adresse
    thierry-externe.henry@ccm.com
    zinedine-externe.zizou@ccm.com
    michel.platini@ccm.com
    samir-externe.nasri@ccm.com
    karim.benzema@ccm.com
    karim.benzema@ccm.com
    nicolas.anelka@ccm.com
    
    0
  20. Stef60
     
    salut lami20j
    je comprend pas ta methode.
    je dois ecrire tes commandes directement dans mon fichier??

    jipicy,
    ton code marche du feu de dieu.
    maintenant il faut que j'enchaine en copiant le fichier fich.out vers un serveur windows.

    j'ai fait ca:
    ------------------------------------------------------------------------------
    #! /bin/bash

    sed -n '/\[groups\]/,/\[\//p' per.txt |\
    grep -o '[ [:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*'|\
    sed -e ':a ; N ; $!b a ;s/\n/,/g' > mail.txt|\
    smbmount //serveurWIN/partage$ /mnt/mail/ -o credentials=/etc/samba/passwd.conf |\
    cp /svn/mail.txt /mnt/lotsfs/ |\
    smbumount /mnt/mail/
    -------------------------------------------------------------------------------------------

    quand je regarde sur le serveur WIN, j'ai bien un fichier mail.txt mais vide.
    0
  21. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Attention !!! Les pipes ( | ) ne servent que pour faire transiter le résultat d'une commande vers une autre et non pas à enchainer des commandes comme tu essaies de le faire.

    Essaie plutôt d'écrire ton script comme suit :
    #! /bin/bash
    
    sed -n '/\[groups\]/,/\[\//p' per.txt |\
    grep -o '[ [:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*'|\
    sed -e ':a ; N ; $!b a ;s/\n/,/g' > mail.txt
    
    smbmount //serveurWIN/partage$ /mnt/mail/ -o credentials=/etc/samba/passwd.conf
    
    if [ -d "/mnt/mail" ]
    then
    cp /svn/mail.txt /mnt/mail/
    smbumount /mnt/mail/
    else
    echo "Erreur ! Le répertoire n'existe pas."
    fi
    De plus, tu montes ce répertoire "/mnt/mail/" et t'essaie de copier le fichier dans celui-là "/mnt/lotsfs/" !? C'est un lien symbolique ? C'est voulu ? ou c'est une erreur ?
    0
  • 1
  • 2