BASH : Extraire nom utilisateur d'une @ mail

Résolu/Fermé
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 - 26 oct. 2007 à 11:03
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 - 19 nov. 2007 à 16:16
Bonjour,
De nouveau j'ai un probleme, jaimerais a partir d'un fichier ( toto) contenant des adresse mail du type prenom.nom@domaine, extraire simplment le user, prenom.nom, dans un 1er temps.

Parmis les prenom.nom qui me restera , il y aura des users avec une chaine de caractere bien specifique, du type XYZ que j'aimerais n epas conserver..autrement dit , j'aimerias supprimer les users contenant la chaine XYZ et ne garder que les autres users.

Voila , ce ci n'est qu'une etape bien sur, le but etant , une fois c'est users recuperés de pouvoir créer des comptes individuellement , pour chaque users extrait, par la commande htpasswd ...

Merci de votre aide
A voir également:

17 réponses

asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
26 oct. 2007 à 11:27
Bonjour,

Tu peux utiliser sed pour faire ce genre de manipulation.
sed -n '/!XYZ/s/\(.*\)@.*/\1/p' toto

-n        => Ne rien afficher
/!XYZ/    => Ne traiter que les lignes ne contenant pas "XYZ"
s/1/2/    => Substitution de 1 par 2
\(.*\)@.* => Indique une chaine du type text1@text2 on enregistre text1 
             (grace aux parenthèses)
\1        => correspond au texte enregistré par la (première) paire de parenthèses
Jette un oeil au manuel (man sed) pour plus d'informations! :)
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
26 oct. 2007 à 14:52
Salut,

essaie comme ça alors :
jp@MDK:~/tmpfs ssh$ cat plop
arnaud.dupont@mondomaine.fr
pierreXYZ.martin@mondomaine.fr

jp@MDK:~/tmpfs ssh$ sed -e '/@/!d;{/XYZ/d; s/\(.*\)@.*/\1/}' plop
arnaud.dupont
jp@MDK:~/tmpfs ssh$
;-))
1
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 13:40
Rapide, concis, detaillé et expliqué!! merci bcp de ton aide
0
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 14:35
arff , fonctionne pas...

exmple pour mon fichier toto, il pourrait contenir:
arnaud.dupont@mondomaine.fr
pierreXYZ.martin@mondomaine.fr

j'aimerais avoir le rsultat suivant a l'ecran:
arnaud.dupont

lon enleve ce qu'il y a a partir de l'@ de dupont et la 2eme adresse n'est pas traitée puisqu'elle contient la chaine XYZ
0

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

Posez votre question
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 15:00
Genial ca marche! pourrias tu , a la maniere de asevere , expliquer un peu les differente etapes de cette comande stp?

avec la 1ere solution proposée, j'ai deja bcp bcp progréssé, et merci dailleur asevere,, et la je crois qu'i y a moyen que je progresse encore!! lol

merci a vous deux
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 894
26 oct. 2007 à 15:15
sed -e    # pour enchainer plusieurs commandes à la suite
'     
/@/!d     # si les lignes ne contiennent pas d'@ les effacer
;         # séparateur de commandes
{         # groupement de commande à appliquer aux lignes contenant un @
/XYZ/d    # si les lignes contiennent "XYZ" les effacer
;        # séparateur de commandes
s/\(.*\)@.*/\1/     # on récupère tout ce qui se trouve avant le @ et on substitue
                    #+ la ligne par lui même, le " \1"
}         # fin du groupement de commandes
'
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 894
26 oct. 2007 à 15:03
Re-

J'y pense, si les adresses se trouvent sur une seule ligne (une adresse par ligne) et toutes en début de ligne, un simple :
 grep -o '.*@' plop | grep -v 'XYZ'
devrait suffire ;-))
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
26 oct. 2007 à 15:04
Salut,

ou un coup de grep | sed
grep -v XYZ fichier | sed -n 's/@.*//p'

pas besoin de capturer le nom, ça suffit de supprimer à partir de @
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
26 oct. 2007 à 15:08
arg, autant pour moi, par fleme, je n'ai testé que sur une variable contenant XYZ et un autre ne contenant pas XYZ, en effet le résultat sur un fichier n'est pas correcte du tout...


@+
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
26 oct. 2007 à 15:14
Bonche,

Bah pour m'excuser d'avoir bourdé...
awk 'BEGIN { FS = "@" } !/XYZ/{print $1}' toto

BEGIN        => L'instruction suivante ne sera jouée que la première fois
{ FS = "@" } => Le separateur de champ est l'@
!/XYZ/       => Recherche les lignes ne contenant pas (!) le motif XYZ
{ print $1 } => Affiche le champ 1
Comme quoi, le solution sont multiples! :o)
0
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 15:20
et si je veux supprimer les lignes content cette fois non plus XYZ mais un caractere numerique je remplace XYZ par [0-9] ?
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
26 oct. 2007 à 15:22
Yop, tout juste :)
0
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 15:26
superbe boulot jipicy!! merci, c'est limpique comme explication
0
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
26 oct. 2007 à 15:27
merci asevere...super sympa
0
TKouder Messages postés 5 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 26 octobre 2007 1
26 oct. 2007 à 18:26
Bonjour,
voici une réponse d'un débutant comme moi mais ca marche et pas trop compliquée

cut -d '@' -f 1 toto | grep -v XYZ
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
26 oct. 2007 à 21:03
Salut,

comme asevere l'a déjà dit Comme quoi, le solution sont multiples! :o)

voici avec perl
perl -ne '/XYZ/?0:s/@.*// and print' toto
perl -ne 'next if /XYZ/;print if s/@.*//' toto

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 894
26 oct. 2007 à 21:23
Tout compte fait avec "sed" un simple :
sed -n '/XYZ/! s/@.*//p' plop
suffisait largement ;-))
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
26 oct. 2007 à 21:24
suffisait largement ;-))
Of, course ;-)
je n'ai dit pas le contraire ;-))
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 894 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
26 oct. 2007 à 21:25
je n'ai dit pas le contraire ;-))
J'ai jamais dit ça non plus, bien au contraire ;-))
0
ponpon27 Messages postés 38 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 22 novembre 2010 1
19 nov. 2007 à 16:16
merci a tous, cela marche bien!
0