J'essaie de rechercher une chaîne 0.49
(avec un point) à l'aide de la commande
grep -r "0.49" *
Mais ce qui se passe, c’est que je reçois également des résultats indésirables contenant la chaîne telle que 0449
, 0949
etc ,. La chose est linux considérant le point (.) Comme n'importe quel personnage et faisant ressortir tous les résultats. Mais je veux obtenir le résultat uniquement pour "0.49".
grep
utilise des expressions rationnelles; .
signifie "n'importe quel caractère" dans une regex. Si vous voulez une chaîne littérale, utilisez grep -F
, fgrep
ou échappez le .
à \.
.
N'oubliez pas de mettre votre chaîne entre guillemets. Sinon, vous devriez utiliser \\.
Donc, votre commande devrait être:
grep -r "0\.49" *
ou
grep -r 0\\.49 *
ou
grep -Fr 0.49 *
grep -F -r '0.49' *
traite 0.49 comme une chaîne "fixe" au lieu d'une expression régulière. Cela fait que .
perd sa signification particulière.
Vous devez vous échapper du .
comme "0\.49"
.
Un .
est un méta-caractère de regex destiné à correspondre à tout caractère (à l'exception de la nouvelle ligne). Pour correspondre à une période littérale, vous devez y échapper.
Juste échapper à la .
grep -r "0\.49"
Vous pouvez échapper au point et à d’autres caractères spéciaux en utilisant \
par exemple. grep -r "0\.49"
Vous pouvez aussi utiliser "[.]"
grep -r "0[.]49"
Point d'échappement. Exemple de commande sera.
grep '0\.00'
Il y a tellement de réponses ici qui suggèrent d'échapper au point avec \.
mais j'ai été confronté à ce problème encore et encore: \.
me donne le même résultat que .
Cependant, ces deux expressions fonctionnent pour moi:
$ grep -r 0\\.49 *
Et:
$ grep -r 0[.]49 *
J'utilise un shell bash "normal" sous Ubuntu et Archlinux.