Recuperer des adresses mail dans un fich txt

Résolu
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   -  
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   -
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

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
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   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
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
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   41
 
J'ai essayé avec sed
avec une boucle while
ca coince toujours
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   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
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
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
Stef60 Messages postés 251 Date d'inscription   Statut Membre Dernière intervention   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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
sed -n '/\[groups\]/,/\[Initiation1/p' fich.in |\
grep -o '[[:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*'|\
sed -e ':a ; N ; $!b a ;s/\n/,/g' > fich.out
;-))
0
Stef60
 
pas de probleme wkm
c'est sympa de ta part.

A bientot peut etre
0
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
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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