Vérifier une chaine de caractère shell unix

samsel -  
 samsel -
Bonjour,
Comment savoir si une chaine de caractère contient des caractères comme ?!,\/"^$ sauf le point?
chaine.fee => chaine correcte
chaine,dd => chaine incorrecte
chaine!dd => chaine incorrecte
..

Merci
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    echo "$chaine" | grep '[?!/\"^$]' >/dev/null &&  echo 'incorrect' || echo "correct"
    ;-))
    1
    1. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
       
      Ça pose pas de problème avec le "!" ?
      Chez moi ça met "event non found"
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention  
         
        Ben pas chez moi (mais à condition d'entourer l'expression par des quotes simples et non par des quotes doubles (guillemets) sinon ça foire) :
        $ echo 'tat\ati.ti' | grep '[?!/\"^$]' >/dev/null &&  echo 'incorrect' || echo "correct"
        incorrect
        $ echo 'tatati.ti' | grep '[?!/\"^$]' >/dev/null &&  echo 'incorrect' || echo "correct"
        correct
        $
        
        $ echo 'tatati.ti' | grep "[?!/\"^$]" >/dev/null &&  echo 'incorrect' || echo "correct"
        -bash: !/\"^$]": event not found
        ;-))
        0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    pourquoi pas une classe de caractères complementée?

    lami20j@debserv:~$ echo 'tatatiti' | grep -E '[^a-zA-Z0-9_]' && echo incorrect || echo correct                                                               correct
    lami20j@debserv:~$ echo 'tata?titi' | grep -E '[^a-zA-Z0-9_]' && echo incorrect || echo correct
    tata?titi
    incorrect
    lami20j@debserv:~$

    1
  3. Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
     
    Bonjour,
    c'est possible avec la commande grep et les expressions régulières.
    En faisant un pipe sur le nombre de ligne, tu as 1 si c'est faux et 0 si c'est correct.
    
    Darkito >echo 'tata.titi' | grep '[?'!'/\"^$]' | wc -l
    0
    Darkito >echo 'tata?titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata'!'titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata/titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata\titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata"titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata^titi' | grep '[?'!'/\"^$]' | wc -l
    1
    Darkito >echo 'tata\$titi' | grep '[?'!'/\"^$]' | wc -l
    1
    
    On est obligé de mette '!' dans l'expression régulière car ! est un caractère réservé.
    de même, dans l'appel de la variable pour le test, il faut mettre \$
    
    0
  4. samsel
     
    Merci les amis :) ça marceh trés bien chez moi ;)
    0