Recuperer des adresses mail dans un fich txt

Résolu/Fermé
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 - 20 sept. 2007 à 15:23
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 - 5 oct. 2007 à 22:46
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 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 15:36
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 jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
20 sept. 2007 à 15:43
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 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 15:47
ce fichier txt il est generé par quoi a la base ??
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
20 sept. 2007 à 15:48
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 jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
20 sept. 2007 à 15:50
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 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 15:54
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 jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
20 sept. 2007 à 16:06
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 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 17:05
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 sept. 2007 à 17:13
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 jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
20 sept. 2007 à 17:31
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 sept. 2007 à 17:48
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 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 17:40
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 sept. 2007 à 18:03
sed -n '/\[groups\]/,/\[Initiation1/p' fich.in |\
grep -o '[[:alnum:].-]*@[ [:alnum:]]*.[ [:alpha:]]*'|\
sed -e ':a ; N ; $!b a ;s/\n/,/g' > fich.out
;-))
0
pas de probleme wkm
c'est sympa de ta part.

A bientot peut etre
0
wkm Messages postés 504 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 10 avril 2010 105
20 sept. 2007 à 17:44
bah si je retrouve mais vieux baths voui je repasserais te donner un exemple.
A+
0
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 sept. 2007 à 18:20
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
20 sept. 2007 à 21:32
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
21 sept. 2007 à 11:14
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