VIM - 基于搜索正则表达式替换

时间:2014-12-17 14:24:17

标签: regex search vim vi

我有一个包含多个(1000+)记录的文件,如:

lbc3.*'

ssa2.*'

lie1.*'

sld0.*'

ssdasd.*'

我可以通过以下方式找到它们:

/s[w|l].*[0-9].*$

我想要做的是用\。*'

替换每个模式的最后部分。

我无法:%s//s[w|l].*[0-9].*$/\\\\\.\*',因为它会替换所有字符串,而我需要的只是替换它的结尾     ' 至     \ '

所以文件输出是llike:

lbc3\\.*'

ssa2\\.*'


lie1\\.*'

sld0\\.*'

ssdasd\\.*'

感谢。

1 个答案:

答案 0 :(得分:1)

通常,解决方案是使用捕获。将\( ... \)放在与您要保留的正则表达式匹配的部分周围,并使用\1包含替换字符串中正则表达式的那部分匹配:< / p>

   s/\(s[w|l].*[0-9].*\)\.\*'$/\1\\.*'/

由于你真的只是在两个你没有改变的字符串之间插入反斜杠,你可以使用第二组parens和\2作为第二组:

   s/\(s[w|l].*[0-9].*\)\(\.\*'\)$/\1\\\2/

或者,您可以使用\zs\ze来分隔您要替换的字符串部分:

   s/s[w|l].*p0-9].*\zs\ze\*\'$/\\/