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
A voir également:

4 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
echo "$chaine" | grep '[?!/\"^$]' >/dev/null &&  echo 'incorrect' || echo "correct"
;-))
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
jipicy Messages postés 41342 Statut Modérateur 4 896 > 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
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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
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
samsel
 
Merci les amis :) ça marceh trés bien chez moi ;)
0