VIM:查找并替换,重用令牌

jus*_*ess 7 regex vim replace

我在制作适当的查找/替换正则表达式以在vim中使用时遇到问题

这是一些SQL:

select avg(field_name1), avg(field_name2), avg(field_name3) from a_table
Run Code Online (Sandbox Code Playgroud)

哎呀,我忘了别名结果:

select avg(field_name1) field_name1,
avg(field_name2) field_name2, avg(field_name3) field_name3 from a_table
Run Code Online (Sandbox Code Playgroud)

所以,在vim中,我确信有一个方便的查找和替换匹配任意[a-z]\+_[a-z]\+内部括号,但我无法弄清楚如何在整个匹配后放置该令牌

rks*_*rks 15

请尝试以下方法:

:s/(\(.*\))/(\1) \1/g
Run Code Online (Sandbox Code Playgroud)


pb2*_*b2q 6

集团要在置换/替换使用与周围的文字\(\),并用指的是替代这些反向引用\1\2等等。

使用[:alnum:]匹配字母数字字符:

:s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g
Run Code Online (Sandbox Code Playgroud)

要将任一正则表达式应用于整个文件,请使用:

:%s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g
Run Code Online (Sandbox Code Playgroud)

另请参阅:help \1有关使用反向引用的更多详细信息。