En this SO question hay algo que no puedo explicar:¿Por qué partido grep todas las líneas para el patrón " '"
grep "\'" input_file
partidos todas las líneas en el archivo dado. ¿Tiene \'
un significado especial para grep?
En this SO question hay algo que no puedo explicar:¿Por qué partido grep todas las líneas para el patrón " '"
grep "\'" input_file
partidos todas las líneas en el archivo dado. ¿Tiene \'
un significado especial para grep?
grep regex GNU extension: ‘\ '’ coincide con el final de toda la entrada
\ es un personaje de escape. Esto significa que el 'debe considerarse como texto para buscar, y no como un carácter de control.
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.
Para mí '$' y '\ '' se comportan de forma un poco diferente. 'echo x | grep "$ x" 'coincide, pero' echo x | grep "\ 'x" 'no coincide. – theon
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'' –
Por supuesto. Buen punto. – theon
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.
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
sí, es extraño que grep coincida con todas las entradas para comillas simples literales – perreal