Экранирование скобки в grep/ack

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

grep methodname( *

или

ack-grep methodname( *

работать?

2 ответов


есть две вещи, интерпретирующие (: раковина, и 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\[\(\] *

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

небольшое демо:

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

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

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