假设我在emacs中打开的文本文件(或dired缓冲区)中有以下内容: file_01.txt file_02.txt ... file_99.txt
我想查询 - 替换或替换文件 01_file.txt等
我想使用query-replace-regexp或replace-regexp,但不知道要放入什么。搜索部分我放入“file_ ..”,但“..”被读作句点替换字符串。我开始学习regexp并且不知道如何做到这一点。请帮助,谢谢。
答案 0 :(得分:24)
M-x replace-regexp
调用函数替换为正则表达式。
对于替换正则表达式,请输入:\(file\)_\([0-9]+\)
这将创建两个组,一个匹配'file'部分,另一个匹配该数字。大括号\( ... \)
是在替换字符串中稍后可用匹配所必需的。
对于替换为,请输入:\2_\1
这将从搜索字符串(数字部分)插入第二个匹配项,添加_(下划线),然后添加搜索字符串中的第一个匹配项(“文件”)。
有关Emacs正则表达式的更多信息,请参阅Regexp Syntax和Regexp Replace。
掌握了正则表达式基础知识后,您可能需要查看带有M-x re-builder
的Emacs ReBuilder工具,这样您就可以交互式构建正则表达式。
答案 1 :(得分:1)
我正在尝试重复此示例以用于学习目的。
我有一个缓冲区
file_01.txt
file_02.txt
file ...
使用re-builder
表达式\(file\)_\([0-9]+\)
不起作用,但有必要将\\(file\\)_\\([0-9]+\\)
之类的转义加倍。
由于涉及到这个问题,我尝试了上面所写的内容,但无济于事。
以下命令
M-x replace-regexp \(file\)_\([0-9]+\)
或\\(file\\)_\\([0-9]+\\)
替换为
\2_\1
或\\2_\\1
总是会产生Replaced 0 occurences
。也就是说,无论圆括号前的\
是单倍还是加倍。
很明显,我在这里遗漏了一些明显的东西。你能解释一下吗?
我使用的是GNU Emacs 24.3.1(x86_64-pc-linux-gnu,GTK + 3.10.7版)