2012-04-27 19 views
92

Estoy tratando de buscar una cadena 0.49 (con punto) utilizando el comandoEl uso de grep para buscar una cadena que tiene un punto en que

grep -r "0.49" * 

Pero lo que sucede es que yo también estoy consiguiendo los resultados deseados que contiene la cadena como 0449, 0949 etc. ,. Lo que pasa es que Linux considera el punto (.) Como cualquier personaje y saca todos los resultados. Pero quiero obtener el resultado solo para "0,49".

+1

recordatorio: se olvidó de aceptar la respuesta;) –

Respuesta

117

grep utiliza expresiones regulares; . significa "cualquier carácter" en una expresión regular. Si quieres una cadena literal, utilice grep -F, fgrep, o escapar de la .-\..

+3

Esto también funciona en 'grep' git. – mwfearnley

+29

Necesitaba escapar dos veces como '\\.' Para que funcione. Estoy usando zsh. –

+3

@NikosRenieris ¿Envolvió su cadena de desgranado con comillas dobles? –

26

grep -F -r '0.49' * golosinas 0.49 como una cadena "fijo" en lugar de una expresión regular. Esto hace que . pierda su significado especial.

4

se puede escapar el punto y otros caracteres especiales usando \

por ejemplo. grep -r "0 \ .49"

+1

¡la gente guapa es rápida en el sorteo de la alimentación principal! 6 respuestas en un minuto! :) –

+0

¡ja, ja! muy cierto. Fácil pregunta muchas respuestas! :) – tuxuday

17

Necesita escapar del . como "0\.49".

Un . es un meta-caracteres de expresiones regulares para que coincida con cualquier carácter (excepto una línea nueva). Para coincidir con un período literal, necesitas escapar de él.

3

Escape dot. El comando de muestra será.

grep '0\.00' 
+1

Gracias a todos por su rápida respuesta. Tus respuestas fueron útiles. :) –

5

Sólo escapar de la .

grep -r "0\.49"

1

También puede utilizar "[.]"

grep -r "0[.]49" 
1

Hay tantas respuestas aquí lo que sugiere escapar el punto con \. pero Me he encontrado con este problema una y otra vez: \. me da el mismo resultado que .

Sin embargo, estas dos expresiones funcionan para mí:

$ grep -r 0\\.49 * 

Y:

$ grep -r 0[.]49 * 

estoy usando un shell bash "normal" en Ubuntu y Archlinux.

Cuestiones relacionadas