2011-01-21 3 views

ответ

29

Там две вещи, интерпретирующие (: оболочка и ack-grep.

Вы можете использовать '', "" или \ избежать ( из оболочки, например,

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

grep использует базовый язык регулярных выражений по умолчанию, поэтому ( не является специальным. (Это было бы, если вы использовали egrep или grep -E или grep -P.)

С другой стороны, ack-grep принимает Perl регулярные выражения в качестве входных данных, в которых ( является особенным, так что вы будете иметь, чтобы избежать этого тоже.

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

Или, если вы не хотите выполнять экранирование для Paren, для Perl используйте кнопку - Q. 'Ack -Q 'methodname ('' –

+0

Одиночные кавычки лучше всего, если вы хотите найти, например, переменные PHP с префиксом '$'. Но опять же, одинарные кавычки заставляют вас использовать уродливое экранирование, если вы хотите искать строки, содержащие одинарные кавычки: http://stackoverflow.com/questions/7254509/how-to-escape-single-quotes-in-bash-grep –

+0

Я никогда не знал о ack-grep - Спасибо! – Michael

0

Попробуйте добавить \ до того, как (

Малый демо:.

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

вшита шаблон в одинарные или двойные кавычки, также работает:

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

Работает в grep, но не в состоянии. Ack считает, что это часть группы (я думаю) – YXD

+1

Проблема в том, что для оболочки требуется экранирование, а также для ack. –

+0

@ и так, каково решение для ack? пытаясь заставить это работать ... – mrk