Vérifier une chaine de caractère shell unix

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. 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
    1. Modérateur
      Salut,
      echo "$chaine" | grep '[?!/\"^$]' >/dev/null &&  echo 'incorrect' || echo "correct"
      ;-))
      1
      1. Ça pose pas de problème avec le "!" ?
        Chez moi ça met "event non found"
        0
      2. Modérateur
        @DarkitoBen 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. Modérateur
      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
      1. Merci les amis :) ça marceh trés bien chez moi ;)
        0