0

特定の関数呼び出しを完全に削除する必要があるファイルが多数あります。私が最初にしたことは、の出力からファイルのリストfind-diredを生成するために使用されました。diredfind

find . \( -type f -exec egrep -q -i -e "awesomeMethod\(\s*true\s*\)" \{\} \; \) -ls

今、私はたくさんのファイルを持っています。そのため、それらすべてを切り替えるためにヒットtすると、それらが強調表示されます。次にQ、 をクリックするquery-replace-regexと、マークされたすべてのファイルが表示されます。この呼び出しを取り除く各ファイルで変数が何と呼ばれているのかわかりません。たとえば、$a->awesomeMethod(true);または$betterVariableName->awesomeMethod(true);を削除している可能性があるため、実際の正規表現が必要です。私は\S+\->awesomeMethod\(\s*?true\s*?\)何かを考えていて、それを何も置き換えていませんでした。私はそれが完全ではないことを知っています-それは文脈自由文法です:-P-しかし、それは私を近づけます.

ファイルのリストを生成した正規表現とほとんど同じなので、この正規表現が何にも一致しなかったことに驚きました。awesomeMethod\(true\)それから、一致するはずの何かを正しく見ているときに、何にも一致しないことさえわかりました。Lispのせいで括弧をダブルエスケープしなければならないのではないかと考えて(インタラクティブにこれを行っているにもかかわらず)、awesomeMethod\\(true\\)もう一度一致しなかったものを試しました。次に、驚くべきことに、正規表現では明らかに想定されていない場合に一致しました。これは、キャプチャ グループを示しているためawesomeMethod(true) です(...)。単一のファイルの MS-% は同じ結果をもたらします。

私は何を間違っていますか?Emacs 24.3.

4

1 に答える 1