2010-06-19 20 views
20

Mi objetivo es encontrar todas las incidencias "<?=" con ack. ¿Cómo puedo hacer eso?ack-grep: caracteres escapando

ack "<?=" 

No funciona. Por favor, dime, ¿cómo puedo arreglar el escape aquí?

Respuesta

27

Dado que ack utiliza expresiones regulares de Perl, su problema se debe al hecho de que en el lenguaje Perl RegEx, ? es un carácter especial que significa "la última coincidencia es opcional". Entonces, lo que está buscando es = precedido por un < opcional

Por lo tanto, debe escapar del ? si eso solo pretende ser un personaje normal.

Para escapar, hay dos enfoques: <\?= o <[?]=; Algunas personas encuentran que la segunda forma de escapar (poner un personaje especial en una clase de personaje) es más legible que la barra invertida: escapar.

ACTUALIZACIÓN Como Josh Kelley añadió amablemente en el comentario, una tercera forma de escapar es utilizar el operador \Q que escapa a todos los caracteres especiales siguientes, hasta que se encuentre \E, de la siguiente manera: \Q<?=\E

+4

O uso '\ Q

+13

O use la opción -Q para escapar de todos los caracteres especiales, porque realmente, ¿quién quiere meterse con la basura \ Q \ E? –

7
ack "<\?=" 

? es un operador de expresiones regulares, por lo que necesita escaparse

18

En lugar de tratar para recordar qué caracteres deben escaparse, puede usar -Q para citar todo lo que se debe citar.

11
ack -Q "<?=" 

Esta es la mejor solución si desea buscar por texto simple.

(si usted no tiene que encontrar por la expresión regular.)

Cuestiones relacionadas