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í?
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í?
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
ack "<\?="
? es un operador de expresiones regulares, por lo que necesita escaparse
En lugar de tratar para recordar qué caracteres deben escaparse, puede usar -Q para citar todo lo que se debe citar.
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.)
O uso '\ Q = \ E' para escapar Caracteres especiales. –
O use la opción -Q para escapar de todos los caracteres especiales, porque realmente, ¿quién quiere meterse con la basura \ Q \ E? –