¿Cómo escapar <o> en un parámetro en shell?


10

Me gustaría usar grepcon una expresión PCRE que contenga el <carácter. Bash piensa que quiero redirigir, pero no quiero. ¿Cómo puedo escapar <?

Respuestas:


11

Pude hacerlo con una barra invertida:

25 % grep \< xmospos.c
#include        <stdio.h>
#include        <stdlib.h>
#include        <getopt.h>
#include        <X11/Xlib.h>

Un citado menor que, y un citado, con una barra invertida menor que ambos dieron respuestas tontas.


55
Sí, o ponerlo entre comillas simples
glenn jackman

Todavía necesito aprender, por ejemplo, cómo funciona exactamente con el escape: grep -oP '(?< )(.*)$'no funciona con comillas simples, por ejemplo. Probé al principio.
hakre

@hakre Parece que hay un error de sintaxis en su expresión regular. ¿Quiso decir (?<! )(.*)$o (?<= )(.*)$?
Gilles 'SO- deja de ser malvado'

4

Dos reglas simples:

  • Una barra invertida \Cescapa al siguiente personaje, sea lo que sea, que no sea una nueva línea.
  • Las comillas simples 'text'escapan a cualquier carácter entre ellas, incluida una barra diagonal inversa, pero sin incluir una comilla simple (ya que marca el final del texto citado).

Así:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

Si necesita pasar un argumento que contiene comillas simples, puede usarlo '\''para "escapar" de una comilla simple dentro de comillas simples. Técnicamente, lo que esto hace es terminar el primer texto literal, luego poner un literal 'en la misma palabra, luego más texto literal aún en la misma palabra.

grep '^D'\''oh!' myfile

El resto de las reglas de cotización (resumidas):

  • Debe citar los siguientes caracteres al menos algunas veces: espacios !"#$&'()*;<>?[\]^`{|}~en blanco y (en otras palabras, los siguientes caracteres son seguros: letras, dígitos %+,-./:=@_y caracteres no ASCII).
  • Entre comillas dobles, todos los caracteres se usan literalmente excepto "$\`y (en shells con historial habilitado) !. Aparecerá una barra invertida entre comillas dobles en la cadena a menos que preceda a uno de los caracteres no literales.

Estas reglas son para bash y otros shells de estilo Bourne (como ash y ksh). También se aplican a zsh (excepto que =después del espacio en blanco puede ser necesario citar). Las reglas en csh / tcsh y en Fish son diferentes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.