Quiero hacer un grep por \resources\
. ¿Cómo hago esto?
He intentado:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
grep
regular-expression
Tom Medley
fuente
fuente
grep '\\resources\\'
Respuestas:
La barra invertida es un carácter especial para muchas aplicaciones:
incluido el shell: debe escapar usando otra barra invertida o más elegante, usando comillas simples cuando sea posible:
Aquí el comando recibió dos argumentos con valor
foo\bar
, que se repitieron tal cual en el terminal.(Arriba, utilicé en
printf
lugar deecho
tantasecho
implementaciones también hacer su propia interpretación de la barra invertida (aquí se expandiría\b
en un carácter de retroceso)).Pero la barra invertida también es un personaje especial para
grep
. Este comando reconoce muchas secuencias especiales como\(
,\|
,\.
, y así sucesivamente. De manera similar, debe alimentar grep con un doble\\
para un carácter de barra invertida real. Esto significa que, utilizando el shell, debe escribir:o equivalente:
(ambas líneas le dicen al shell que transmita
foo\\bar
como argumentogrep
).Muchos otros comandos interpretan barras diagonales inversas en algunos de sus argumentos ... y se necesitan dos niveles de escape (uno para escapar de la interpretación de shell, otro para escapar de la interpretación de comando).
Por cierto, para el shell, las comillas simples
'…'
evitan cualquier tipo de interpretación de caracteres, pero las comillas dobles solo evitan algunas de ellas: en particular$
,`
y\
siguen siendo caracteres activos dentro"…"
.fuente
También puede usar
fgrep
(que es sologrep
con la-F
bandera). Esto obliga a grep a interpretar el patrón como una cadena fija (es decir, tratará a\
como un literal\
). Aún necesitará proteger las barras invertidas de la expansión del caparazón.fuente
..\
e incluso con'..\\'
no obtuve los resultados que quería.grep -F '..\'
me consiguió lo que quería! Graciasgrep
requiere cuatro barras invertidas para representar una barra invertida:fuente
grep
solo requiere 1 barra invertida para escapar de otra barra invertida, pero el shell también requiere que se cite la barra invertida. Las comillas dobles ("
) NO hacen comillas invertidas, pero sí la barra invertida, por lo que las comillas dobles en su ejemplo no hacen nada y las 4 barras invertidas son necesarias en su lugar.grep
.