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

Linux Discussion :

Vérifier la présence d'une sous-chaine dans une chaine en shell


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut Vérifier la présence d'une sous-chaine dans une chaine en shell
    Bonjour !

    Je cherche à vérifier (donc juste lire) si une certaine sous-chaine se trouve dans une chaine en shell (ou awk ou sed), depuis hier ; j'ai fini par trouvé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # $i est un chemin de fichier, comme par exemple :
    $i = "/dossier1/dossier2/jQuery/sousdossier1/fichier1.php"
     
    # et je voudrais verifier si dans ce chemin se trouve le mot jQuery :
    echo `expr "$i" : '\(/jQuery/\)'`

    Mais ca ne m'affiche rien même quand la sous chaine est belle et bien presente dans la chaine...

    Je précise que je cherche juste à vérifier si le mot jQuery est présent dans le chemin de fichier, pas dans tout le fichier... Et pas a remplacer ou extraire...

    Quelqu'un aurait il une idée ou une piste ?

    Cordialement
    ginger

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Bonjour,

    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ shopt -s extglob
    $ i="/dossier1/dossier2/jQuery/sousdossier1/fichier1.php"
    $ [[ $i == *@(jQuery*) ]] && echo ok || echo KO
    ok
    $ i="/dossier1/dossier2/juery/sousdossier1/fichier1.php"
    $ [[ $i == *@(jQuery*) ]] && echo ok || echo KO
    KO
    le positionnement de l'option du shell extglob est insdispensable.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Merci N_BaH pour ta réponse

    Je suis en sh y a t il un équivalent de shopt -s extglob pour ça ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Je ne crois pas

    en sh, il va probablement falloir en passer par grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ i="/dossier1/dossier2/jQuery/sousdossier1/fichier1.php"
    $ if echo "$i" |grep jQuery >/dev/null 2>&1; then echo ok; else echo KO; fi
    ok
    $ i="/dossier1/dossier2/juery/sousdossier1/fichier1.php"
    $ if echo "$i" | grep jQuery >/dev/null 2>&1; then echo ok; else echo KO; fi
    KO
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup ça fonctionne

    Code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if echo "$i" |grep "jQuery" >/dev/null 2>&1
    then 
    	echo "ok"
    else 
    	echo "ko"
    fi
    Histoire de tout comprendre que signifie /dev/null ? Et 2>&1 ?

    Have a nice day !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    c'est pour faire taire grep (ici), en redirigeant la sortie d'erreur sur la sortie standard dans /dev/null.
    cf. man null
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Points : 65
    Points
    65
    Par défaut
    ok merci pour la précision

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

Discussions similaires

  1. [RegEx] Remplacement de chaine dans une sous chaine
    Par fpouget dans le forum Langage
    Réponses: 4
    Dernier message: 23/02/2010, 08h49
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. inclure une sous requête dans une requête
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/05/2007, 19h12
  4. recherche d'une chaine dans une sous chaine
    Par claralavraie dans le forum Oracle
    Réponses: 1
    Dernier message: 31/07/2006, 12h00
  5. Réponses: 28
    Dernier message: 22/09/2005, 11h57

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