在grep / ack中转义括号

时间:2011-01-21 16:32:32

标签: regex grep ack

我想查找字符串“methodname(”,但我无法逃避“(”。我怎么能

grep methodname( *

ack-grep methodname( *

上班?

2 个答案:

答案 0 :(得分:29)

解释(有两件事:shell和ack-grep

您可以使用''""\从shell中转义(,例如

grep 'methodname(' *
grep "methodname(" *
grep methodname\( *
默认情况下,

grep使用基本正则表达式语言,因此(并不特殊。 (如果你使用egrepgrep -Egrep -P,就会这样做。)

另一方面,ack-grep将Perl正则表达式作为输入,其中(也是特殊的,所以你也必须逃避它。

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

答案 1 :(得分:0)

尝试在\之前添加(

小演示:

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

用单引号或双引号括起模式也有效:

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