como grep para c: \

3

Estou usando o grep do cygwin para encontrar todas as instâncias de caminhos codificados na unidade c. fazendo:

grep -r "c:\" .

grep: trailing backslash

Alguém sabe como posso fazer isso?

    
por noobler 02.10.2012 / 21:16

2 respostas

10

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

    
por 02.10.2012 / 21:24
0

Ou use apenas "c:/" (que também funciona no Windows).

    
por 03.10.2012 / 11:16