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 :

KSH : recherche d'un mot dans une chaine de caractère


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 80
    Points
    80
    Par défaut KSH : recherche d'un mot dans une chaine de caractère
    Bonjour,

    je n'arrive pas à créer mon script en ksh pour répondre à cet algo :
    MOT_A_CHERCHER=papa
    CHAINE=maman,papa,enfant

    SI MOT_A_CHERCHER est dans CHAINE
    on affiche 'chaine trouve'
    SINON
    on affiche 'chaine absente'


    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    Exemple
    MOT_A_CHERCHER=papa
    CHAINE=maman,papa,enfant

    La commande ci-dessous permet de trouver toute les lignes qui contiennent le motif "papa"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ${CHAINE} | grep "papa"
    Maintenant si tu veux afficher le message "chaine trouvee"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NBR_CHAINE_TROUVE=`echo ${CHAINE} | grep "papa" | wc -l`
     
    if [[ ${NBR_CHAINE_TROUVE} == 0 ]]
       then  
           printf "%b" "Info : Chaine absente\n"
       else
          printf "%b" "Info : Chaine trouvee\n"
    fi
    Remarques
    1- il y a certainement plus intelligent
    2- `-> correspond au caractère qui se trouve sur la touche 7

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 462
    Points
    19 462
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MOT_A_CHERCHER="papa"
    CHAINE="maman,papa,enfant"
    if [[ $MOT_A_CHERCHER =~ $CHAINE ]]
    then echo "chaine trouvée"
    else echo "chaine absente"
    fi
    # ou, pour des conditions aussi simples
    # [[ $MOT_A_CHERCHER =~ $CHAINE ]] && echo "chaine trouvée" || echo "chaine absente"
    emmachane: il faut ajouter -o à grep pour obtenir le nombre d'occurrences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -o $MOT_A_CHERCHER <<<"$CHAINE" | wc -l

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 80
    Points
    80
    Par défaut
    Merci à tous les deux pour vos réponses. C'est ce que je faisais avant de poser la question mais je n'arrivais pas au résultat voulu. Si on utilise la commande : echo ${CHAINE} | grep "papa" | wc -l , on ne passera jamais dans le if [[ ${NBR_CHAINE_TROUVE} == 0 ]] car la commande retourne [espaces]1. Il faut donc rajouter un sed qui supprime les espaces :
    echo ${CHAINE} | grep "papa" | wc -l | sed 's/^ *//'

    Merci encore !!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 462
    Points
    19 462
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nb=( $(grep -o "papa" <<<"$CHAINE") )
    nb=${#nb[@]}
     
    if ((nb))
    then printf 'Chaîne présente %dx\n' $nb
    else echo "Chaîne absente"
    fi
    ...
    ?

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

Discussions similaires

  1. Rechercher un mot dans une chaine de caractères
    Par zellinho dans le forum SAS Base
    Réponses: 4
    Dernier message: 14/03/2013, 09h52
  2. Recherche de plusieurs mots dans une chaine
    Par Thib6670 dans le forum C#
    Réponses: 3
    Dernier message: 30/06/2011, 15h19
  3. Recherche d'un mot dans une chaine de caractère
    Par thanks33 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2009, 12h26
  4. recherche d'un mot dans une chaine
    Par meloo dans le forum C++
    Réponses: 5
    Dernier message: 16/01/2007, 17h16
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

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