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. 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. 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. Merci les amis :) ça marceh trés bien chez moi ;)
        0