Подтвердить что ты не робот

Выход из скобки в grep/ack

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

grep methodname( *

или

ack-grep methodname( *

работать?

4b9b3361

Ответ 1

Там две вещи интерпретируют (: оболочку и 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\[\(\] *

Ответ 2

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

Маленькая демонстрация:

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

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

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