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 case/esac


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut expression régulière avec case/esac
    Bonjour,

    Comment utiliser les "expressions régulières" dans la fonction case/esac?
    Je cherche à en établir une pour un texte que je recois en argument :
    CRITICAL - 10.28.2.2: rta nan, lost 100%
    Voici ce que j'ai essayé mais sans grand résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    DATE=`date +%Y%m%d`
    PATH="/software/nagios/libexec/eventhandlers/"
    HOSTNAME="$3"
    FILE=event-"$DATE"-"$HOSTNAME"
    cd $PATH
     
    echo "start event"  >$FILE
    echo "value 1 : $1" >>$FILE
    echo "value 2 : $2" >>$FILE
    echo "value 3 : $3" >>$FILE
    echo "value 4 : $4" >>$FILE
    echo "value 5 : $5" >>$FILE
    echo "value 6 : $6" >>$FILE
    echo "end event"    >>$FILE
     
    case $6 in
      ´CRITICAL *.*.*.*: rta nan, lost 100%´ )
            echo "yes"
            ;;
      *)
            echo "non"
            ;;
    esac
    Dois-je plutôt essayer les []... ou plutôt awk, sed? il faut aussi dire que parfois je mélange les expression régulière du shell et du perl! comment ne pas se mélanger les pinceaux...?
    Quelqu'un a-t-il une idée ou une piste???
    Merci
    nm

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Par défaut
    Bonjour,

    Essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    case $6 in
    [A-Z]*.[0-9\.]*)
              echo "yes"
    ;;
     
    *)
             echo "no"
    ;;
     
    esac
    A+
    MyTux.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    case ne répond pas aux regexps.

    il suit les règles des Substitutions des chemins. cf. man bash!

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut
    Merci MyTux, mais le filtre n'est pas assez précis pour mon cas!
    Ok, je regarderai man bash... merci N_BaH

  5. #5
    Membre éprouvé Avatar de exodev
    Inscrit en
    Septembre 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2009
    Messages : 201
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TEST="hello world"
     
    case $TEST in
            $(echo "${TEST}" | grep "hello"))
                    echo "hello there"
                    ;;
            *)
                    echo "default"
                    ;;
    esac
    si le grep trouve le pattern il retourne toute la ligne, la comparaison avec cette même ligne déclenche la condition

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut
    C'est exactement ce qu'il me fallait... merci beaucoup!

    Autre petite question: est-il préférable d'utiliser grep avec case ou avec une condition if/else?

    Merci

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

Discussions similaires

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

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