2011-01-21 16 views
23

Quiero buscar la cadena "methodname (", pero soy incapaz de escapar de la "(". ¿Cómo puedo obtenerEscapar un paréntesis en grep/ACK

grep methodname(* 

o

ack-grep methodname(* 

para trabajar

Respuesta

29

Hay dos cosas que interpretan la (: la cáscara, y ack-grep.

Puede utilizar '', "", o \ para escapar de la ( de la concha, por ejemplo

grep 'methodname(' * 
grep "methodname(" * 
grep methodname\(* 

grep utiliza un lenguaje de expresiones regulares básica por defecto, así ( no es especial. (Sería si utilizó egrep o grep -E o grep -P.)

Por otro lado, ack-grep toma Perl expresiones regulares como entrada, en la que ( también es especial, por lo que tendrá que escapar también.

ack-grep 'methodname\(' * 
ack-grep "methodname\\(" * 
ack-grep methodname\\\(* 
ack-grep 'methodname[(]' * 
ack-grep "methodname[(]" * 
ack-grep methodname\[\(\] * 
+10

O si no quiere hacer el escape de la paren, para Perl, use el - Q flag. 'Ack -Q 'methodname (' ' –

+0

Las comillas simples son las mejores si desea buscar, por ejemplo, variables de PHP con el prefijo' $ '. Pero, una vez más, las comillas simples lo fuerzan a usar feo escaping si quiere buscar cadenas que contienen comillas simples: http://stackoverflow.com/questions/7254509/how-to-escape-single-quotes-in-bash-grep –

+0

Nunca supe de ack-grep - ¡Gracias! – Michael

0

trate de añadir un \ antes de la (

pequeña demostración:?.

$ cat file 
bar 
methodname(
foo 
$ grep -n methodname\(file 
2:methodname(
$ 

Encerrando el patrón entre comillas simples o dobles también funciona:

$ grep -n 'methodname(' file 
2:methodname(
$ grep -n "methodname(" file 
2:methodname(
$ 
+1

Funciona en grep pero no ack. Ack piensa que es parte de un grupo (creo) – YXD

+1

El problema es que el paren tiene que ser escapado para el shell, y también para ack. –

+0

@ y entonces, ¿cuál es la solución para ack? tratando de hacer que esto funcione ... – mrk