我有大量文件需要完全删除某个函数调用。我做的第一件事是从的输出find-dired
中生成dired
文件列表:find
find . \( -type f -exec egrep -q -i -e "awesomeMethod\(\s*true\s*\)" \{\} \; \) -ls
现在我有很多文件。所以我点击t
切换所有它们,它们变得突出显示。然后我点击Q
,这会显示query-replace-regex
所有标记的文件。我不知道要摆脱此调用的每个文件中调用的变量是什么,例如,它可能正在删除$a->awesomeMethod(true);
or $betterVariableName->awesomeMethod(true);
,因此我需要一个真正的正则表达式。我在想\S+\->awesomeMethod\(\s*?true\s*?\)
什么,然后什么都没有。我知道这绝对不是完美的——它是一种上下文无关的语法:-P——但它会让我很接近。
当这个正则表达式不匹配任何东西时,我感到很惊讶,因为它与生成我的文件列表的正则表达式几乎相同。然后我看到它甚至awesomeMethod\(true\)
不匹配任何东西,当我正在寻找它应该匹配的东西时。考虑到由于 lisp (即使我是交互式地这样做),我可能不得不双重转义括号,我尝试awesomeMethod\\(true\\)
了再次不匹配。然后,令人惊讶的是,awesomeMethod(true)
确实匹配,当这显然不应该出现在正则表达式中时,因为它(...)
表示一个捕获组。单个文件的 MS-% 给出相同的结果。
我究竟做错了什么?Emacs 24.3。