Seu erro é porque você está usando aspas duplas ( "
), que permitem que o conteúdo seja interpretado pelo shell antes de chegar a grep
.
Experimente grep -r 'c:\' .
.
echo 'c:\' > test
ire@localhost$ cat test
c:\
ire@localhost$ grep -r 'c:\' test
c:\
Explicação : \
tem um significado especial, tanto para o shell quanto para o grep. É usado como um caractere de escape, para permitir que o próximo caractere seja interpretado literalmente.
Quando você faz grep "c:\"
, o shell pega o conteúdo, converte-o para a string literal c:\
e passa para grep
. grep
vê a barra invertida única e a interpreta como um caractere de escape. Mas não há nenhum personagem seguindo o \
para escapar! Então, razoavelmente, reclama.
O uso de aspas simples ( '
) protege o conteúdo do shell. Mas você ainda precisa de duas barras, porque você precisa dizer grep
que é uma barra invertida literal que você está querendo procurar.
Alternativamente, você poderia ter feito:
grep -rF 'C:\' .
ou
grep -rF "C:\" .
A opção -F
para grep (anteriormente conhecido como o comando fgrep
) diz grep
para procurar por strings fixas e, portanto, não há nada para escapar e a barra invertida não é especial para grep
(mas ainda é para o shell entre aspas duplas).