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 :

Expression régulière avec ET logique


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Par défaut Expression régulière avec ET logique
    Bonjour à toutes et à tous,
    je suis débutant complet et je me mets à la ligne de commande. Après avoir vu de nombreux exemples je me suis posé la question suivante :
    Imaginons que je veuille lister tous les fichiers du répertoire courant commençants par "test" et se terminant par "*".
    J'ai trouvé une solution avec deux grep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls | grep ^test | grep \*$
    Mais je ne trouve pas comment faire avec un seul grep. J'ai pensé à :
    mais ça ne fonctionne pas. Y a-t-il un moyen de faire une conjonction des deux conditions ?
    Cordialement.

    P.S. : j'utilise le bash disponible sur Linux Mint 19.2 et j'ai créé des fichiers : test, tust*, testtt*

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    une regex n'est pas utile; utilise les Correspondance de motifs (cf. man bash) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' ./test*\*
    NB: on n'utilise pas ls pour ce genre de chose.
    d'une manière générale, on n'utilise ls que pour afficher la liste des fichiers/répertoires..., pas pour en traiter la sortie avec quelque filtre que ce soit.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par cuati Voir le message
    cette tournure fonctionne très bien chez moi en l'état

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Par défaut
    Merci beaucoup à vous deux !

    N_BaH, je débute complètement, je ne savais même pas qu'il y avait une commande printf . Merci.
    Du coup, pour ce genre de chose, on utilise plutôt printf ?

    BufferBob, quand je tape chez moi, j'obtiens :
    alors que je ne voudrais que testtt*... quelque chose m'échappe ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    printf, c'est le doigt du sage.
    il faut regarder ce que peut faire la Correspondance des motifs (le globbing en anglais).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Par défaut
    Ok, je vais regarder tout ça de plus près.
    Encore merci.

  7. #7
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Citation Envoyé par cuati Voir le message
    quelque chose m'échappe ?
    Il faut que tu protèges ton expression régulière des interprétations par le shell, avec des guillemets simples :

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Par défaut
    Merci beaucoup balkany, c'est exactement ça.
    Je dois avouer que je ne comprends pas bien les différences d'interprétation entre "ER", 'ER' et `ER` et surtout qui interprète ? le shell, grep ? Pour moi c'est pas super clair...
    En tout cas, encore merci.

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    • Les 'simple quotes' protègent strictement les expressions.
    • Les "double quotes" protègent les expressions mais sont perméables à l'interprétation de certaines choses. Exemple: "$var" laisse la variable $var être remplacée par sa valeur.
    • Les `backticks` sont dépassés, et à mettre à la poubelle, au profit de $( ) qui permet la substitution de commande. Pour en savoir plus, "man bash", paragraphe substitution de commande.



    • Quand tu démarres ta console, il faut un logiciel pour comprendre les commandes que tu tapes. C'est l'interpréteur de commandes. Typiquement, bash, sh, ksh, csh, ash, zsh et j'en passe. Pour connaître le tien, tape : .
    • Mais tu peux utiliser des programmes externes. Comme grep/sed/awk/paste/sort/uniq/less (et j'en passe, à nouveau). Ces commandes peuvent avoir leurs propres langages, comme sed ou awk.



    Donc la remarque de Balkany consiste à ce que l'étoile ne soit pas comprise par bash comme "tous les fichiers" mais par grep comme "quantité 0 ou plus de l'élément précédent". Protégée par des simple quotes, aucun danger de méprise. cf plus haut.

Discussions similaires

  1. Expression Régulière avec Quote
    Par jon301 dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2006, 22h08
  2. [RegEx] Expression régulière avec preg_match_all
    Par tit_oune dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2006, 23h28
  3. Expressions régulières avec variable
    Par killprog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/04/2006, 17h03
  4. Expression réguliére avec CHECK
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/09/2005, 17h38
  5. Expression régulière avec "|"
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/07/2005, 15h09

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