我在制作适当的查找/替换正则表达式以便在vim
中使用时遇到问题这是一些SQL:
select avg(field_name1), avg(field_name2), avg(field_name3) from a_table
糟糕,我忘了给结果添加别名:
select avg(field_name1) field_name1,
avg(field_name2) field_name2, avg(field_name3) field_name3 from a_table
所以,在vim中,我确信有一个方便的查找和替换匹配任意[a-z]\+_[a-z]\+
内括号,但我无法弄清楚如何在整个匹配后放置该标记
答案 0 :(得分:15)
尝试以下方法:
:s/(\(.*\))/(\1) \1/g
答案 1 :(得分:4)
将您要在替换/替换中使用的文本与周围的\(\)
分组,并使用\1
,\2
等在替换中引用这些反向引用。< / p>
使用[:alnum:]
匹配字母数字字符:
:s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g
要将正则表达式应用于整个文件,请使用:
:%s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g
有关使用反向引用的详细信息,另请参阅:help \1
。