Primero, tenga en cuenta que la barra oblicua coincide demasiado:
$ echo $'eegg \n e.g.' | grep e\.g\.
eegg
e.g.
En lo que respecta a Bash , un período de escape es lo mismo que un período. Bash pasa el período a grep . Para grep, un punto coincide con cualquier cosa.
Ahora, considere:
$ echo $'eegg \n e.g.' | grep e\\.g\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\.g\\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\\.g\\\\.
$
Cuando Bash ve una doble barra, la reduce a una sola barra y la pasa a grep que, en la primera de las tres pruebas anteriores, ve, como queremos, una sola barra antes de un período. Por lo tanto, esto hace lo correcto.
Con una triple barra, Bash reduce las dos primeras a una sola barra. Entonces ve \.
. Dado que un período de escape no tiene un significado especial para Bash, esto se reduce a un período simple. El resultado es que grep ve, como queremos, una barra antes de un período.
Con cuatro barras, Bash reduce cada par a una sola barra. Bash pasa a grep dos barras y un punto. grep ve las dos barras y un punto y reduce las dos barras a una sola barra literal . A menos que la entrada tenga una barra diagonal seguida de cualquier carácter, no hay coincidencias.
Para ilustrar eso último, recuerde que dentro de las comillas simples, todos los caracteres son literales. Por lo tanto, dadas las siguientes tres líneas de entrada, el comando grep solo coincide en la línea con la barra diagonal en la entrada:
$ echo 'eegg
e.g.
e\.g\.' | grep e\\\\.g\\\\.
e\.g\.
Resumen del comportamiento de Bash
Para Bash, las reglas son
Dos barras se reducen a una sola barra.
Una barra diagonal frente a un carácter normal, como un punto, es solo el carácter normal (punto).
Así:
$ echo \. \\. \\\. \\\\.
. \. \. \\.
Hay una manera simple de evitar toda esta confusión: en la línea de comando Bash, las expresiones regulares deben colocarse entre comillas simples. Dentro de comillas simples, Bash deja todo solo.
$ echo '\. \\. \\\. \\\\.' # Note single-quotes
\. \\. \\\. \\\\.
\\\.
y daría grep,\.
pero no es así. buena pregunta