web-dev-qa-db-ja.com

grep / ackの括弧をエスケープする

文字列「methodname(」を探したいのですが、「(」をエスケープできません。どうすれば取得できますか?

grep methodname( *

または

ack-grep methodname( *

働くために?

25
YXD

(の解釈には、シェルとack-grepの2つがあります。

''""、または\を使用して、シェルから(をエスケープできます。

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\[\(\] *
31
ephemient

\の前に(を追加してみてください。

小さなデモ:

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

パターンを一重引用符または二重引用符で囲むこともできます。

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