grep: barra invertida final

Pregunta:

Quiero hacer un grep para \resources\ . ¿Cómo hago esto?

He intentado:

grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"

Ninguno de estos funciona .

Respuesta:

La barra invertida es un carácter especial para muchas aplicaciones:

  • incluido el shell: debe escapar usando otra barra invertida o de manera más elegante, usando comillas simples cuando sea posible:

     $ printf '%s\n' foo\\bar 'foo\bar' foo\bar foo\bar

    Aquí el comando recibió dos argumentos con valor foo\bar , que se repitieron tal cual en la terminal.

    (Arriba, usé printf lugar de echo ya que muchas implementaciones de echo también hacen su propia interpretación de la barra invertida (aquí expandiría \b en un carácter de retroceso)).

  • Pero la barra invertida también es un carácter 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, al usar el shell, debe escribir:

     grep 'foo\\bar'

    o equivalente:

     grep foo\\\\bar

    (ambas líneas le dicen al shell que transmita foo\\bar como argumento a grep ).

  • Muchos otros comandos interpretan las barras invertidas en algunos de sus argumentos … y se necesitan dos niveles de escape (uno para escapar de la interpretación del shell, otro para escapar de la interpretación del comando).


Por cierto, para el shell, las comillas simples '…' impiden cualquier tipo de interpretación de caracteres, pero las comillas dobles solo previenen algunos de ellos: en particular $ , ` y \ permanecen como caracteres activos dentro de "…" .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım