Échapper une parenthèse dans grep / ack

Je veux chercher la chaîne "methodname(", mais je suis incapable d'échapper à la "(". Comment puis-je obtenir

grep methodname( *

Ou

ack-grep methodname( *

Travailler?

23
demandé sur ealfonso 2011-01-21 19:32:32

2 réponses

Il y a deux choses interprétant le (: le shell, et ack-grep.

Vous pouvez utiliser '', "", ou \ pour échapper à la ( à partir du shell, par exemple

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

grep utilise un langage d'expression régulière de base par défaut, donc ( n'est pas spécial. (Il serait si vous avez utilisé egrep ou grep -E ou grep -P.)

D'un autre côté, ack-grep prend des expressions régulières Perl en entrée, dans lesquelles ( est également spécial, vous devrez donc y échapper aussi.

ack-grep 'methodname\(' *
ack-grep "methodname\\(" *
ack-grep methodname\\\( *
ack-grep 'methodname[(]' *
ack-grep "methodname[(]" *
ack-grep methodname\[\(\] *
29
répondu ephemient 2011-01-21 16:40:38

Essayez d'ajouter \ avant (.

Petite démo:

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

Enfermer le motif entre guillemets simples ou doubles fonctionne également:

$ grep -n 'methodname(' file
2:methodname(
$ grep -n "methodname(" file
2:methodname(
$ 
0
répondu codaddict 2011-01-21 16:33:56