247 votes

Utilisation de grep pour rechercher une chaîne contenant un point

J'essaie de rechercher une chaîne 0.49 (avec point) en utilisant la commande

grep -r "0.49" *

Mais ce qui se passe, c'est que j'obtiens aussi des résultats indésirables qui contiennent la chaîne telle que 0449 0949 etc. La chose est linux considérant dot(.) comme n'importe quel personnage et faisant ressortir tous les résultats. Mais je veux obtenir le résultat seulement pour "0.49".

315voto

geekosaur Points 26170

grep utilise des regex ; . signifie « n'importe quel caractère » dans une regex. Si vous voulez une chaîne littérale, utilisez grep -F, fgrep, ou échappez au . pour \..

N'oubliez pas de mettre votre ficelle entre guillemets. Sinon, vous devriez utiliser \\.

Donc, votre commandement devrait être :

grep -r "0\.49" *

ou

grep -r 0\\.49 *

ou

grep -Fr 0.49 *

38voto

Joni Points 46728

grep -F -r '0.49' * traite 0.49 comme une chaîne "fixe" au lieu d'une expression régulière. Cela fait perdre . sa signification particulière.

22voto

codaddict Points 154968

Vous devez échapper au . en tant que "0\.49".

Un . est un méta-caractère regex pour correspondre à n'importe quel caractère(à l'exception de la nouvelle ligne). Pour correspondre à une période littérale, vous devez l'échapper.

7voto

skan Points 690

Vous pouvez également utiliser "[.]"

grep -r "0[.]49"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X