Избегание скобок в grep / ack - PullRequest
       6

Избегание скобок в grep / ack

23 голосов
/ 21 января 2011

Я хочу найти строку "methodname (", но не могу выйти из "(". Как я могу получить

grep methodname( *

или

ack-grep methodname( *

на работу?

Ответы [ 2 ]

29 голосов
/ 21 января 2011

Есть две вещи, интерпретирующие (: оболочка и 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\[\(\] *
0 голосов
/ 21 января 2011

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

Небольшая демонстрация:

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

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

$ grep -n 'methodname(' file
2:methodname(
$ grep -n "methodname(" file
2:methodname(
$ 
...