Eu quero fazer um grep para \resources\
. Como eu faço isso?
Eu tentei:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
grep
regular-expression
Tom Medley
fonte
fonte
grep '\\resources\\'
Respostas:
A barra invertida é um caractere especial para muitos aplicativos:
incluindo o shell: é necessário escapá-lo usando outra barra invertida ou mais elegante, usando aspas simples quando possível:
Aqui, o comando recebeu dois argumentos com valor
foo\bar
, que foram ecoados no terminal.(Acima, eu usei, em
printf
vez deecho
tantasecho
implementações, também fazer sua própria interpretação da barra invertida (aqui seria expandida\b
para um caractere de backspace)).Mas a barra invertida também é um caractere especial para
grep
. Este comando reconhece muitas seqüências especiais, como\(
,\|
,\.
e assim por diante. Da mesma forma, você precisa alimentar grep com um duplo\\
para um caractere de barra invertida real. Isso significa que, usando o shell, você precisa digitar:ou equivalente:
(as duas linhas dizem ao shell para transmitir
foo\\bar
como argumentogrep
).Muitos outros comandos interpretam barras invertidas em alguns de seus argumentos ... e são necessários dois níveis de escape (um para escapar da interpretação do shell, outro para escapar da interpretação do comando).
A propósito, para o shell, aspas simples
'…'
impedem qualquer tipo de interpretação de caracteres, mas aspas duplas apenas evitam algumas delas: em particular$
,`
e\
permanecem caracteres ativos"…"
.fonte
Você também pode usar
fgrep
(que é apenasgrep
com a-F
bandeira). Isso força o grep a interpretar o padrão como uma string fixa (isto é, tratará a\
como um literal\
). Você ainda precisará proteger as barras invertidas da expansão pelo shell.fonte
..\
e, mesmo'..\\'
assim, não obtive os resultados desejados.grep -F '..\'
conseguiu o que eu queria! Obrigadogrep
requer quatro barras invertidas para representar uma barra invertida:fonte
grep
requer apenas 1 barra invertida para escapar de outra barra invertida, mas o shell também exige que sejam citadas barras invertidas. As aspas duplas ("
) NÃO citam barras invertidas, mas a barra invertida, e é por isso que as aspas duplas no seu exemplo não fazem nada e as 4 barras invertidas são necessárias.grep
.