grep / ackの括弧をエスケープする
文字列「methodname(」を探したいのですが、「(」をエスケープできません。どうすれば取得できますか?
grep methodname( *
または
ack-grep methodname( *
働くために?
(
の解釈には、シェルと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\[\(\] *
\
の前に(
を追加してみてください。
小さなデモ:
$ cat file
bar
methodname(
foo
$ grep -n methodname\( file
2:methodname(
$
パターンを一重引用符または二重引用符で囲むこともできます。
$ grep -n 'methodname(' file
2:methodname(
$ grep -n "methodname(" file
2:methodname(
$