Bash/shell : tester présence caractères spéci
Résolu/Fermé
A voir également:
- Bash/shell : tester présence caractères spéci
- Classic shell windows 11 - Télécharger - Personnalisation
- Retour à la ligne bash ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bingo bash free - Télécharger - Divers Jeux
- Bash écrire dans un fichier - Forum Shell
2 réponses
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
Modifié par mamiemando le 21/02/2012 à 20:15
Modifié par mamiemando le 21/02/2012 à 20:15
C'est normal, '[' et ']' sont des méta-caractères au sens de grep (ce sont des opérateurs pour les expressions regulières, comme tu peux le voir dans "man grep). Ainsi, si tu veux parler du caractère [ ou ], il faut l'échapper avec le méta-caractère \.
Il y a d'autres méta-caractères, parmi lesquels : ?, *, +, ^, $ etc... Pour plus de détails :
Bonne chance
(mando@aldur) (~) $ cat toto J'aime les tapirs [J] aime les loutre (mando@aldur) (~) $ grep '\[' toto [J] aime les loutre (mando@aldur) (~) $ grep '\]' toto [J] aime les loutre
Il y a d'autres méta-caractères, parmi lesquels : ?, *, +, ^, $ etc... Pour plus de détails :
man grep
Bonne chance
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
Modifié par mamiemando le 22/02/2012 à 01:39
Modifié par mamiemando le 22/02/2012 à 01:39
Pour [ comme tu l'as écrit il faut faire :
Pour inclure le caractère ] comme dit dans man grep :
Ainsi l'expression régulière de qqchquicommenceparQ réagit dès qu'on trouve une occurrence de ], c et [. Pour réagir sur la classe de caractères { ']', 'c' } il faudrait par exemple écrire :
Pour t'en convaincre :
Sinon, tu peux écrire :
C'est un peu moche mais bon, au moins ça marche quand on ne connaît pas les conventions de grep ;-) Ici les parenthèse \( ... \) servent uniquement si tu es dans une expression régulière plus compliquée, sinon tu peux bien entendu les omettre :
Bonne chance
(mando@aldur) (~) $ echo "aab[]" | grep '[c\[]' aab[]
Pour inclure le caractère ] comme dit dans man grep :
Pour inclure un caractère ], mettez-le en premier dans la liste. De même, pour inclure un caractère ^, placez-le n'importe où sauf au début de la liste. Enfin, pour inclure un -, placez-le en dernier.
Ainsi l'expression régulière de qqchquicommenceparQ réagit dès qu'on trouve une occurrence de ], c et [. Pour réagir sur la classe de caractères { ']', 'c' } il faudrait par exemple écrire :
(mando@aldur) (~) $ echo "aabc]" | grep '[]c]' --color aabc]
Pour t'en convaincre :
(mando@aldur) (~) $ echo "aabd]e" | grep 'd[]c]e' --color aabd]e
Sinon, tu peux écrire :
(mando@aldur) (~) $ echo "aab[]" | grep '\(]\|c\)' aab[]
C'est un peu moche mais bon, au moins ça marche quand on ne connaît pas les conventions de grep ;-) Ici les parenthèse \( ... \) servent uniquement si tu es dans une expression régulière plus compliquée, sinon tu peux bien entendu les omettre :
(mando@aldur) (~) $ echo "aab[]" | grep ']\|c' aab[]
Bonne chance
21 févr. 2012 à 21:04
Normalement $echo "aab[]" | grep '[c\]] devrait matcher soit c, soit \] qui est ] protégé.
Mais ça ne marche pas
21 févr. 2012 à 23:18
si on place le crochet fermant en premier ça fonctionne mais je n'ai pas d'explication.
22 févr. 2012 à 07:47
mais je n'ai pas d'explication.
man grep :
;-))
22 févr. 2012 à 11:26
22 févr. 2012 à 11:36
Il n'y avait rien d'agressif dans mon intervention, juste la réponse à ton interrogation ;-))