2011-01-21 59 views
23

我想尋找字符串「方法名(」,但我無法逃脫「(」我怎樣才能得到逸出的grep/ACK括號

grep methodname(* 

ack-grep methodname(* 

工作

回答

29

有兩件事情解釋(:外殼,和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\[\(\] * 
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 2011-01-21 16:35:30

+1

問題是,paren必須逃脫外殼,也爲ack。 – 2011-02-28 21:49:55