在一系列的行和列中搜索和替换

时间:2010-10-02 18:29:03

标签: regex vim

我想应用搜索并替换仅在文本文件的给定范围的行和列中起作用的正则表达式模式,如下所示:

AAABBBFFFFBBBAAABBB
AAABBBFFFFBBBAAABBB
GGGBBBFFFFBHHAAABBB

例如,我想在第1行到第2行和第4列到第6行用YYY替换BBB,然后获得此输出:

AAAYYYFFFFBBBAAABBB
AAAYYYFFFFBBBAAABBB
GGGBBBFFFFBHHAAABBB

有没有办法用Vim做到这一点?

2 个答案:

答案 0 :(得分:11)

:1,2 s/\%3cBBB/YYY/

\%3c表示第三列(请参阅:help /\%c或更多全局:help pattern

答案 1 :(得分:4)

如果这是您要替换的第一个,则不要指定/ g

:1,2s/BBB/YYY/

会正常工作。

或者,如果您需要准确指定要替换的列,可以使用\%Nv语法,其中N是虚拟列(看起来是列,因此选项卡是多列,使用c而不是v实际列)

替换第1行和第2行的第二组B可以通过以下方式完成:

:1,2s/\%11vBBB/YYY/