IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupération d'adresses mail


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut Récupération d'adresses mail
    bonjour
    j'ai exporté un .pdf en .txt avec python et maintenant je souhaite récupérer les adresses mail qu'il contient
    j'ai trouvé sur internet ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -iEo[a-z.0-9-_]{1,}@[a-z0-9-_]*.[-a-z0-9-_]*.*[a-z]{2,4}’ listeParentsTriDivisionCOLLEGE.pdf.txt | sort | uniq > listecollege.txt
    plus précisément je l'ai trouvé ici : trouvé ici https://www.nuleninfo.com/tutoriels/47-maillinux/
    le truc c'est que je ne maîtrise par grep et je ne comprend pas quoi faire avec le message d'erreur que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep: invalid character range
    j'aurai une deuxième question après, mais pouvez-vous me débloquer déjà ici ?
    merci !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par elodouwen Voir le message
    j'ai trouvé sur internet ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -iEo[a-z.0-9-_]{1,}@[a-z0-9-_]*.[-a-z0-9-_]*.*[a-z]{2,4}’ listeParentsTriDivisionCOLLEGE.pdf.txt | sort | uniq > listecollege.txt
    le truc c'est que je ne maîtrise par grep et je ne comprend pas quoi faire avec le message d'erreur que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep: invalid character range
    Copier/coller des codes issus du net ce n'est pas forcément à faire. Surtout si ces codes sont typographiés avec une police qui ressort joliement à l'écran mais qui donne des caractères incompatibles bash.
    Les chaines du grep se mettent entre double quotes. Ici elle commence par une backquote et se termine par une quote simple. Et en shell, les backquotes ont une signification particulière (ainsi que les quotes simples qui en ont une autre).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oui.
    les apostrophes n'en sont pas.
    et la regex est erronée : un nom de domaine ne peux pas être tel qu'elle le décrit.

    et oui. nuleninfo est bien nuleninfo; ça aurait dû de titiller le neurone.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    c'est gentil les gars d'avoir relevé mon incompétence et de m'avoir averti que le copier coller ne marche pas
    vous, vous savez faire, moi non
    si vous ne pouvez pas juste me rectifier le code, ce qui risque de vous prendre quelques secondes, je vais me décider à passer quelques heures à apprendre grep
    l'an prochain sûrement après le rush du boulot…
    bonne soirée
    Vincent

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    c'est gentil les gars d'avoir relevé mon incompétence et de m'avoir averti que le copier coller ne marche pas
    Bah, ça t'a au-moins appris quelque chose. Moi je suis content chaque fois que j'apprends un truc.

    Citation Envoyé par elodouwen Voir le message
    vous, vous savez faire, moi non
    Tu aurais pu aussi ouvrir un tutoriel. On a tous été débutants, on a tous ouvert un livre dans lequel était indiqué que grep voulait une chaine à chercher. Ensuite évidemment vient la notion de "comment exprimer une chaine en shell" qu'on supposait connue de ta part. Parce que si on doit en plus estimer ton niveau de méconnaissances comment savoir où s'arrêter ? Au shell ? A Linux ? A l'ordinateur ?

    Citation Envoyé par elodouwen Voir le message
    si vous ne pouvez pas juste me rectifier le code, ce qui risque de vous prendre quelques secondes
    Tu es enseignant, tu acceptes ça de tes élèves? Tu leurs dit "ici il y a une erreur" tu acceptes qu'ils te répondent "si vous ne pouvez pas juste me rectifier, ce qui risque de vous prendre quelques secondes" ???
    Donc si je ne l'ai pas fait, c'est déjà parce que je ne voyais pas la nécessité. Tu as récupéré une regex sur un site, je pars du principe qu'elle fonctionne (le type qui l'a écrite l'aura au-moins testé). Donc je te dis que l'erreur est sur les quotes qui doivent être doubles tu changes alors les quotes en quotes double ça ne risque que de te prendre quelques secondes.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oops, oui, j'ai oublié de dire que le tiret, qui, entre crochets, indique normalement des intervalles, pour être considéré en tant que tel, doit n'être pas précédé, ou pas suivi par un quelconque caractère.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    j'ai étudié le Bash en Mooc (super Mooc la Réunion) il y a plusieurs années
    j'avais adoré
    j'avais pas approfondi le grep, juste les bases
    j'avais écrit un tuto dessus
    mais là je suis pas du tout en mode apprentissage, j'ai très peu de temps et j'ai vraiment besoin d'extraire les adresses mails
    j'ai essayé ce que vous avez dit "transformer les ' en " (guillemet) j'ai essayé aussi de transformer les ' en (deux apostrophes) mais ça ne marche pas et j'ai pas compris la remarque sur les tirets (les - ? les _ ?)
    j'ai essayé ça donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grep -iEo[a-z.0-9-_]{1,}@[a-z0-9-_]*.[-a-z0-9-_]*.*[a-z]{2,4}’ truc.pdf.txt | sort | uniq > listecollege.txt
    grep -iEo "[a-z.0-9-_]{1,}@[a-z0-9-_]*.[-a-z0-9-_]*.*[a-z]{2,4}" truc.pdf.txt | sort | uniq > listecollege.txt
    grep -iEo ''[a-z.0-9-_]{1,}@[a-z0-9-_]*.[-a-z0-9-_]*.*[a-z]{2,4}'' truc.pdf.txt | sort | uniq > listecollege.txt
    mais toujours le même message d'erreur
    si je dois plonger dans le manuel de grep bon il est certain que c'est instructif… mais long…
    si jamais, avant, cependant, vous avez une idée je suis preneur
    désolé pour tout à l'heure si j'ai été impatient
    et tu peux retirer la dernière ligne aussi
    voilà : juste pour dire que si vous avez une idée je suis bien preneur

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    si jamais, avant, cependant, vous avez une idée je suis preneur
    Peut-être déjà un exemple du fichier de départ nous aiderait à y voir plus clair.

    Citation Envoyé par elodouwen Voir le message
    et tu peux retirer la dernière ligne aussi
    Ok
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    ok merci
    bon…
    je suis embêté car je ne peux pas publier le fichier
    ou alors je vais me bouger un peu les fesses et demain matin je vais essayer sur un fichier test pour voir et après je reviens vers vous
    on va faire ça
    donc je vous dis à demain pour les questions, le fichier test, ou la conclusion :-)
    bonne soirée
    Vincent

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    dans une regex, une expression entre crochets peut définir un intervalle (par exemple entre a et Z) en plaçant les deux limites de part et d'autre d'un tiret.
    le tiret, dans ce cas de figure, perd sa nature de caractère pour devenir une partie de la regex, sauf s'il est placé au tout début, ou tout à la fin.
    donc, pour définir entre crochet un intervalle entre a et d et comprenant un tiret et un soulignement, on écrira [a-b_-], sinon l'interpréteur de regex va chercher un intervalle supplémentaire entre d et _; ce qui est impossible puisqu'un intervalle n'a que deux limites !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Oui si le fichier est sensible (emails réels) tu peux en créer un faux c'est pas grave. L'important est de savoir comment sont stockés ces adresses (une par ligne, plusieurs par ligne, dans du texte, avec un séparateur, ...)
    D'ailleurs le site que tu donnes au départ est un peu moyen. Il parle d'extraction d'adresses sans même montrer l'exemple sur lequel il s'appuie. Comment on peut en tirer quoi que ce soit.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    merci de vos réponses
    donc signifie de a jusqu'à z, puis de 0 jusqu'à 9, puis le - et le _ c'est ça ?

    voici un fichier non réel mais inspiré du fichier réel :

    fichier-test.txt
    j'avais rédigé ça lors de mon mooc mais j'ai du mal moi même à m'y replonger (paragraphe "grep")
    Images attachées Images attachées

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    voici un fichier non réel mais inspiré du fichier réel :
    A priori, les adresses sont uniques sur la ligne. Donc la ligne commence et fini par un email.

    En tapant grep -e "^.\{1,\}@.\{1,\}\..\{1,\}$" fichier ça me sort tactac@orange.fr

    La regex signifie "tout ce qui commence (le "^") par des caractères quelconque et multiples (le "point" c'est "un caractère quelconque" et les accolades contenant "1," signifient "de 1 à n"), puis suivi d'un "@", puis d'autres caractères multiples, puis un vrai point cette fois (donc protégé par un backslash), puis encore des caractères et qui termine la ligne (le "$"). C'est un peu large mais si ça convient...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    merci beaucoup les gars ça marche

    j'ai noté les explications

    ma seconde question est la suivante :

    pour ne pas que les autres antennes locales me demandent de faire le job sur leurs pdf (convertir le pdf en txt avec mon programme python + écrémer le txt avec le bash)
    je voudrais automatiser le processus

    y a til moyen de créer un exéctuable, comme j'imagine que je peux le faire avec python
    les collègues n'ont pas forcément accès à la ligne de commande, c'est le moins qu'on puisse dire

    croyez vous que je puisse créer un exécutable windows/mac qui, lorqu'on double clique dessus, lance le script bash, en donnant par exemple la contrainte que l'exécutable soit dans le même dossier que le .txt ?

    dans mon tuto personnel, voici ce que j'avais écrit mais moi je ne sais pas quoi en faire :
    17.1. Méthode
    Taper un script avec un éditeur de texte brut.
    La première ligne doit toujours être #!/bin/bash et les remarques commencent par # Vérier qu'on a les droits dessus : chmod +x fichier.sh
    L'éxécuter en tapant nom pas fichier.sh mais ./fichier.sh
    Pour que fichier.sh fonctionne dans spécier son chemin, il faut que . soit dans la variable
    PATH
    On peut aussi l'exécuter en faisant bash fichier.sh
    Autre méthode : taper /ici/la/fichier.sh (en donnant donc le chemin absolu) permet d'exé-
    cuter la commande.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    pour ne pas que les autres antennes locales me demandent de faire le job sur leurs pdf (convertir le pdf en txt avec mon programme python + écrémer le txt avec le bash)
    je voudrais automatiser le processus

    y a til moyen de créer un exéctuable, comme j'imagine que je peux le faire avec python
    les collègues n'ont pas forcément accès à la ligne de commande, c'est le moins qu'on puisse dire
    Si tes collègues sont sous Linux, tu peux créer un shell qui
    • lance la conversion pdt=>txt
    • extrait les adresses


    Si maintenant ils sont sous Windows alors non. Il n'y a pas (à ma connaissance) d'outil permettant de créer un runtime d'un shell comme on peut le faire avec Python. Il faut que tu fasses ton extraction en Python (ce que tu aurais pu faire dès le départ, Python connait aussi les regex) puis de là tu peux créer un runtime Python pour tes collègues (mais s'ils sont sous Windows il te faudra créer ton runtime depuis un Windows sur lequel tu auras installé Python)

    Citation Envoyé par elodouwen Voir le message
    dans mon tuto personnel, voici ce que j'avais écrit mais moi je ne sais pas quoi en faire :
    Taper un script avec un éditeur de texte brut.
    La première ligne doit toujours être #!/bin/bash et les remarques commencent par # Vérier qu'on a les droits dessus : chmod +x fichier.sh
    L'éxécuter en tapant nom pas fichier.sh mais ./fichier.sh
    Pour que fichier.sh fonctionne dans spécifier son chemin, il faut que . soit dans la variable PATH
    On peut aussi l'exécuter en faisant bash fichier.sh
    Autre méthode : taper /ici/la/fichier.sh (en donnant donc le chemin absolu) permet d'exé-cuter la commande.
    Peut-être que tu ne sais pas quoi en faire parce que tu n'as pas bien perçu le fonctionnement général d'un script. Donc tu as écrit des règles comme tu aurais écrit des formules magiques.
    La première ligne doit indiquer le langage du script. Cela permet à Linux de savoir quel interpréteur utiliser et permet ainsi à userB (qui n'est pas forcément en bash) d'utiliser un script écrit par userA. Le script s'exécutant dans une bulle dédiée ne dépendant pas des shells des userA et userB mais de son propre shell à lui.
    Le chmod +x permet de rendre un fichier exécutable (par sécurité les fichiers créés ne sont pas exécutables par défaut). Mais dès qu'il l'est, alors sauf changement manuel il le reste.
    Un script doit toujours être exécuté en indiquant son chemin (question de sécurité). Ce chemin peut être nommé en relatif (ne commence pas par un slash) ou en absolu (commence par un slash). Ainsi le nom "point" référence bien un chemin.
    La phrase "Pour que fichier.sh fonctionne dans spécifier son chemin, il faut que . soit dans la variable PATH" est totalement fausse (exemple tu peux très bien exécuter le programme "ls" sans spécifier son chemin et sans avoir "." dans le PATH). Voici la réalité: on peut positionner des chemins préférentiels dans la variable "PATH". Ainsi si le chemin n'est pas donné, alors le script sera essayé depuis chaque chemin contenu dans cette variable. Mais quoi qu'il en soit, le script sera toujours exécuté depuis un chemin (donné manuellement ou pris dans le PATH). Accessoirement mettre "." dans le PATH constitue une faille de sécurité (tout fichier placé n'importe où pouvant alors être exécuté par mégarde).
    Si un script n'est pas exécutable, on peut alors à la place demander à l'interpréteur du script de traiter le script. Mais cela nécessite de savoir dans quel langage a été écrit le script (si tu demandes bash script_python ça va pas trop marcher). Il vaut mieux le rendre exécutable, lui positionner le "#!..." correct et laisser ensuite l'OS gérer.
    Et il y a une syntaxe plus souple pour #!/bin/bash qui est #!/usr/bin/env bash. Cela permet à l'OS de prendre le bash là où il se trouve (il n'est pas forcément dans "/bin"). Et c'est valable pour les autres langages (perl, python, ...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    A priori, les adresses sont uniques sur la ligne. Donc la ligne commence et finit par un email.

    En tapant grep -e "^.\{1,\}@.\{1,\}\..\{1,\}$" fichier ça me sort tactac@orange.fr

    La regex signifie "tout ce qui commence (le "^") par des caractères quelconque et multiples (le "point" c'est "un caractère quelconque" et les accolades contenant "1," signifient "de 1 à n"), puis suivi d'un "@", puis d'autres caractères multiples, puis un vrai point cette fois (donc protégé par un backslash), puis encore des caractères et qui termine la ligne (le "$"). C'est un peu large mais si ça convient...
    Il me semble que, logiquement, lorsque ^ est suivi de quelque chose comme .* ou .\{1,\}, alors il ne sert à rien... De même pour le $ final !

    En effet, environ toutes les lignes commencent par n'importe quel caractère (sauf les lignes vides).

    Petit défi (pour me contredire (ou vous convaincre)): trouver une chaine $strqui donne des résultats différents pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -e "^.\{1,\}@.\{1,\}\..\{1,\}$"  <<<"$str"
    grep -e ".\{1,\}@.\{1,\}\..\{1,\}"  <<<"$str"

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Il me semble que, logiquement, lorsque ^ est suivi de quelque chose comme .* ou .\{1,\}, alors il ne sert à rien... De même pour le $ final !

    En effet, environ toutes les lignes commencent par n'importe quel caractère (sauf les lignes vides).
    Je me suis dit (peut-être à tort) que le grep irait plus vite (se contentrant exclusivement sur le début des lignes)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 456
    Points : 43 248
    Points
    43 248
    Par défaut
    y a til moyen de créer un exéctuable, comme j'imagine que je peux le faire avec python
    les collègues n'ont pas forcément accès à la ligne de commande, c'est le moins qu'on puisse dire

    croyez vous que je puisse créer un exécutable windows/mac qui, lorqu'on double clique dessus, lance le script bash, en donnant par exemple la contrainte que l'exécutable soit dans le même dossier que le .txt ?
    Pour Windows, normalement on fait du batch ou du PowerShell, avec WSL (Windows Subsystem for Linux), tu peux faire tourner Bash. Par contre la commande grep par exemple est externe, mais je pense que grep devrait être dispo avec WSL2.

    Pour Mac,les anciennes versions utilisent Bash, les nouvelles utilisent zsh, à vérifier que ton script est compatible avec zsh. Les commandes comme grep sont dispo sur Mac (certaines commandes peuvent avoir un comportement légèrement différent par rapport à Linux, mais grep je pense pas). Pour créer un icône, je crois qu'en ajoutant l'extension .command (au raccourci), ça se lance, sinon un Applescript appelant ton script Shell devrait faire l’affaire.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  19. #19
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Cumuler "sort" et "uniq" n'est pas élégant. Il suffit d'écrire à la place :
    Le cas où, classiquement, on cumule, c'est quand il s'agit de compter le nombre d'occurrences :
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    {1,}
    Rappel :
    • <rien> : un
    • * : zéro ou plus
    • \+ : un ou plus
    • \? : zéro ou un

    L'expression citée est donc maladroite.
    Notez que dans mon énumération, j'ai utilisé l'échappement utile par défaut, sans l'option -E.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. Récupération d'adresses mail
    Par tirando dans le forum E-Mailing
    Réponses: 2
    Dernier message: 24/06/2018, 17h48
  2. [SP-2013] Problème de récupération des adresses mails des utilisateurs
    Par mimi1255 dans le forum SharePoint
    Réponses: 0
    Dernier message: 10/06/2018, 12h26
  3. Récupération des adresses mails
    Par Martin_77 dans le forum Outlook
    Réponses: 0
    Dernier message: 12/07/2010, 14h50
  4. Réponses: 1
    Dernier message: 05/03/2007, 10h56
  5. [VBA][outlook] récupération des adresses mail
    Par arno2004 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 27/07/2004, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo