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).