web-dev-qa-db-ja.com

grepで括弧をエスケープする方法

ディレクトリ内のすべてのJavaScriptファイルで関数呼び出し「init()」をgrepしたいです。 grepを使用してこれを行うにはどうすればよいですか?

特に、どのように括弧をエスケープしますか、()

場合によります。通常のgrepを使用する場合、エスケープしません:

echo '(foo)'|grep '(fo*)'

括弧をグループ化として使用する場合は、実際にエスケープする必要があります。

拡張正規表現 を使用すると、エスケープします:

echo '(foo)'|grep -E '\(fo*\)'
49

文字列「init()」を正確に検索する場合は、fgrep "init()"またはgrep -F "init()"を使用します。

これらは両方とも固定文字列マッチングを行います。つまり、パターンを正規表現としてではなく、検索するプレーンな文字列として扱います。また、正規表現検索を行うよりも高速だと思います。

23
Dave Kirby
$ echo "init()" | grep -Erin 'init\([^)]*\)'
1:init()

$ echo "init(test)" | grep -Erin 'init\([^)]*\)'
1:init(test)

$ echo "initwhat" | grep -Erin 'init\([^)]*\)'
4
ghostdog74

ルートディレクトリに移動します(JavaScriptファイルの場所がわかっている場合)。次に、以下を実行します。

grep 'init()' *.js
1
Konark Modi