BASH : Extraire nom utilisateur d'une @ mail
Résolu
ponpon27
Messages postés
38
Date d'inscription
Statut
Membre
Dernière intervention
-
ponpon27 Messages postés 38 Date d'inscription Statut Membre Dernière intervention -
ponpon27 Messages postés 38 Date d'inscription Statut Membre Dernière intervention -
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
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:
- BASH : Extraire nom utilisateur d'une @ mail
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
17 réponses
Bonjour,
Tu peux utiliser sed pour faire ce genre de manipulation.
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èsesJette un oeil au manuel (man sed) pour plus d'informations! :)
Salut,
essaie comme ça alors :
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$;-))
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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 '
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 :
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 ;-))
Salut,
ou un coup de grep | sed
pas besoin de capturer le nom, ça suffit de supprimer à partir de @
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 @
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...
@+
@+
Bonche,
Bah pour m'excuser d'avoir bourdé...
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 1Comme quoi, le solution sont multiples! :o)
et si je veux supprimer les lignes content cette fois non plus XYZ mais un caractere numerique je remplace XYZ par [0-9] ?
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
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
Salut,
comme asevere l'a déjà dit Comme quoi, le solution sont multiples! :o)
voici avec perl
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