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 :

Différence entre expression rationnelle et joker


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 23
    Par défaut Différence entre expression rationnelle et joker
    Bonjour ,
    je découvre la notion d'expression régulière sur Linux et j'ai peur que cela remette en cause ma compréhension de certaines commandes apprises jusqu'à présent :

    Par exemples:

    - J'ai compris que . est un métacaractère permettant de représenter n'importe quel caractère excepté un saut de ligne. Pourtant lorsque je saisis la commande ls . dans un terminal, j'obtiens le noms des fichiers et des répertoires contenu dans le répertoire courant.
    Donc comment devrait-on faire, par exemple, pour utiliser . comme expression régulière et afficher un répertoire qui s'appellerait a/ ?

    -De même * permet de représenter 0 ou n fois le regroupement précédent. Or si je saisis ls E*, j'obtiens tous les éléments du répertoire courant commençant par E.
    Comment faudrait-il alors procéder pour obtenir uniquement les répertoires qui s'appelleraient E/ ou EE/ en utilisant E* ?

    De façon générale, j'ai l'impression que mon incompréhension concerne les différences entre un joker et une expression régulière. Pourriez-vous m'éclairer sur ces points là s'il vous plaît ?

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

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

    en effet, tu mélanges les regex et les Développement des chemins (les "jokers").

    le shell ne gère pas les regex*, donc tout ce que tu peux utiliser directement dans un terminal sont les Développement des chemins (les "jokers").

    pour utiliser les regex, il faut recourir à d'autres programmes : grep, awk, find (si tu lui demandes gentiment ), perl...

    --
    * sauf entre crochets doubles, avec l'opérateur =~.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 166
    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 : 18 166
    Par défaut
    Pourtant lorsque je saisis la commande ls . dans un terminal, j'obtiens le noms des fichiers et des répertoires contenu dans le répertoire courant.
    Chaque dossier contient deux fichiers spéciaux . et ..
    . correspond au dossier en cours, .. correspond a son dossier parent.

    et un point en 1er caractère dans un fichier signifie que celui-ci sera invisible.

    Le métacaractère permettant d'indiquer n’importe quel caractère est "?"

    tu peux lister les fichiers commençant par une lettre de "a" à "e" via ls [a-e]* ou ls [abcde]*
    ça ressemble à des regex mais ça n'en ai pas, je dirais que ça en empreinte la syntaxe mais c'est limité au seul exemple présenté à ma connaissance. Et en plus avec la commande indiquée, pour le contenu des sous-dossiers, ça ne fait pas le filtrage.
    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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    si je me souviens bien de ce que j'ai lu (il y a longtemps), historiquement, le Développement de chemin (dont font parties les expressions entre crochets) précède les regex*.
    la description qui est faite de ces expressions entre crochets dans le man bash et dans le man 7 regex porte sur les mêmes comportements (intervalle et collations).

    --
    * je n'en mettrais, cependant, pas ma main au feu.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    En bash, si on active l'extglob (shopt -s extglob), on peut utiliser la syntaxe étendu du globbing (ce que vous appelez "joker")
    voici quelques exemples:
    La liste des fichiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ls -1
    aaaaaa
    aaaaccc
    aaabbb
    ababa
    Les exemples de globbing étendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ls *(a)
    aaaaaa
    $ ls *(a)*(b)
    aaaaaa  aaabbb
    $ ls *(a)+(b)
    aaabbb
    $ ls *(ab)a
    ababa

  6. #6
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 23
    Par défaut
    Merci pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre expressions régulières
    Par m.brahim dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 12/12/2018, 13h32
  2. Différences entre Visual studio pro et Visual basic express
    Par kek's dans le forum Visual Studio
    Réponses: 7
    Dernier message: 01/02/2016, 13h06
  3. [WD12E] différence entre version express et version complète
    Par redwire dans le forum WinDev
    Réponses: 2
    Dernier message: 25/02/2010, 21h10
  4. Réponses: 3
    Dernier message: 19/09/2008, 10h35
  5. différence entre SQl server Express 2005 et SQL 2005
    Par nutix2003 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/05/2007, 15h56

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