2013-07-02 1 views
0

특정 함수 호출을 완전히 제거해야하는 많은 파일이 있습니다. Emacs "query-replace-regex"가 정규식이 아닌가요?

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

이 지금은 많은 파일이 : 내가 한 첫 번째 일은 find의 출력에서 ​​파일의 dired 목록을 생성하기 위해 사용 find-dired했다. 그래서 나는 t을 눌러 모든 것을 토글했다. 그런 다음 Q을 누르십시오. 표시된 파일 모두에 대해 query-replace-regex이 표시됩니다. 이 호출을 없애는 각 파일에서 변수가 무엇인지 알려지지 않았습니다. 예를 들어 $a->awesomeMethod(true); 또는 $betterVariableName->awesomeMethod(true);을 제거 할 수 있으므로 실제 정규식이 필요합니다. 나는 \S+\->awesomeMethod\(\s*?true\s*?\) 또는 무엇인가를 생각하고 있었고 그것을 아무것도 대체하지 않았습니다. 나는 그것이 완벽하지는 않다는 것을 압니다. 문맥 자유 문법입니다 :-P -하지만 그것은 나에게 가까이 다가 갈 것입니다.

이 정규식이 내 파일 목록을 생성 한 정규식과 거의 같기 때문에이 정규식이 아무 것도 맞지 않을 때 놀랐습니다. 그렇다면 awesomeMethod\(true\)조차도 일치해야하는 것을 바로보고있을 때 어떤 것도 일치하지 않는 것을 보았습니다. 어쩌면 내가 lisp 때문에 괄호를 두 번 이스케이프해야한다고 생각했는데 (비록 내가 대화식으로 이것을하고 있어도) 나는 다시 일치하지 않는 awesomeMethod\\(true\\)을 시도했다. 그런 다음 놀랍게도 awesomeMethod(true)은 이 캡처 그룹을 나타내므로과 일치합니다. 정규식에 포함되지 않은 것은 분명합니다. 단일 파일에 대한 M-S- %는 동일한 결과를 제공합니다.

내가 뭘 잘못하고 있니? 이맥스 24.3.

답변