2011-01-21 11 views
23

chcę szukać napisu „methodname (”, ale nie jestem w stanie uciec „(”. Jak mogę uzyskaćUciekając nawias w grep/ACK

grep methodname(* 

lub

ack-grep methodname(* 

pracować

Odpowiedz

29

Są dwie rzeczy interpretowania (: powłoka i ack-grep.

Można użyć '', "" lub \, aby usunąć z powłoki powłokę (, np.

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

grep wykorzystuje podstawowy język wyrażeń regularnych domyślnie, więc ( nie jest wyjątkowy. (Byłoby jeśli użyto egrep lub grep -E lub grep -P.)

Z drugiej strony, ack-grep trwa Perl wyrażeń regularnych jako wejście w którym ( jest również specjalny, więc będziesz musiał uciec, że zbyt.

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

Lub jeśli nie chcesz wykonywać ucieczki paren, dla Perl, użyj - Flaga Q. "ack -Q" nazwa metody ('' –

+0

Pojedyncze cytaty są najlepsze, jeśli chcesz wyszukać np. Zmienne PHP z prefiksem '$' .Ale znowu, pojedyncze cudzysłowy zmusza Cię do użycia brzydkiego escaping jeśli chcesz szukać ciągi zawierające pojedyncze cytaty: http://stackoverflow.com/questions/7254509/how-to-escape-single-quotes-in-bash-grep –

+0

Nigdy nie wiedziałem o ack-grep - Dzięki! – Michael

0

Spróbuj dodać \ przed (

Mały demo:?.

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

Enclosing wzór w pojedyncze lub podwójne cudzysłowy działa również:

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

Działa w języku grep, ale nie w odbiorze. Ack uważa, że ​​jest to część grupy (chyba). – YXD

+1

Problem polega na tym, że parenka musi uciekać dla powłoki, a także dla potwierdzenia. –

+0

@ i jakie jest rozwiązanie dla potwierdzenia? próbując zmusić to do pracy ... – mrk

Powiązane problemy