2012-07-28 16 views

Respuesta

-2

\ es un personaje de escape. Esto significa que el 'debe considerarse como texto para buscar, y no como un carácter de control.

+3

Pero incluso si el archivo de texto no contiene una sola comilla char, grep aún coincide con todas las líneas del archivo. Creo que eso es lo que el OP está preguntando. – theon

+0

sí, es extraño que grep coincida con todas las entradas para comillas simples literales – perreal

3

Ese es un comportamiento realmente extraño de grep, no sé cómo explicarlo, pero debo tener en cuenta que \' no coincide con ningún carácter. Se parece que tiene el mismo significado que $:

$ echo x | grep "x\'" 
x 
$ echo xy | grep "x\'" 
$ echo x | grep "\'x" 

Actualización 1

Como se afirma en http://www.gnu.org/software/findutils/manual/html_node/find_html/grep-regular-expression-syntax.html (gracias a Richard Sitze para el enlace) que realmente tiene el mismo significado que $. Pero mientras tanto, he notado una diferencia entre \' y $:

$ echo x | grep 'x$' 
x 
$ echo x | grep 'x$$' 
$ echo x | grep "x\'" 
x 
$ echo x | grep "x\'\'" 
x 
$ echo x | grep "x\'\'\'" 
x 

Puede especificar \' tantas veces como desee, pero eso no es así para $. Debe haber solo un $.

Otra observación importante. El manual dice:

‘\'’ matches the end of the whole input 

Pero estrictamente hablando eso no es verdad porque \' partidos no sólo el final de toda la entrada, pero al final de cada línea única también:

$ (echo x; echo y) | grep "\'" 
x 
y 

Exactamente cómo $ hace.

+0

Para mí '$' y '\ '' se comportan de forma un poco diferente. 'echo x | grep "$ x" 'coincide, pero' echo x | grep "\ 'x" 'no coincide. – theon

+3

Debe escribir 'grep '$ x'' not' grep "$ x" '; porque '" $ x "' se expandirá por el shell y '" $ x "' es lo mismo que '''' (nada). Simplemente intente con 'echo' $ x "' y 'echo '$ x'' –

+0

Por supuesto. Buen punto. – theon

3

no sabía esta característica de las expresiones regulares. Pero está listado en regular-expressions.info como el ancla end of the string.

No existe en todas las implementaciones de expresiones regulares solo en GNU Basic y Extended Regular Expressions, consulte este compatibility chart para obtener más información.

Cuestiones relacionadas