2011-01-21 15 views

risposta

29

Ci sono due cose che interpretano il (: il guscio, e ack-grep.

È possibile utilizzare '', "" o \ per sfuggire alla ( dal guscio, per esempio

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

grep utilizza un linguaggio di base delle espressioni regolari per impostazione predefinita, in modo da ( non è speciale. (Sarebbe se si è utilizzato egrep o grep -E o grep -P.)

D'altra parte, ack-grep prende Perl espressioni regolari come input, in cui ( è anche speciale, quindi dovrete per sfuggire anche questo.

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

Oppure se non vuoi eseguire l'escape del paren, per Perl, usa il - Q flag. 'Ack -Q 'methodname ('' –

+0

Le virgolette singole sono le migliori se si desidera cercare, ad esempio, variabili PHP con prefisso '$'. Ma poi di nuovo, le virgolette singole ti costringono a usare la brutta escaping se vuoi cercare stringhe contenenti citazioni singole: http://stackoverflow.com/questions/7254509/how-to-escape-single-quotes-in-bash-grep –

+0

Non ho mai saputo di ack-grep - Grazie! – Michael

0

provare ad aggiungere un \ prima della (

piccola demo:?.

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

Racchiudere il modello tra virgolette singole o doppie funziona anche:

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

Funziona in grep ma non ack. Ack pensa che faccia parte di un gruppo (credo) – YXD

+1

Il problema è che il paren deve essere scappato per la shell e anche per ack. –

+0

@ e quindi, qual è la soluzione per ack? cercando di farlo funzionare ... – mrk