Reputation: 72636
I want to apply a search and replace regular expression pattern that work only in a given range of line and column on a text file like this :
AAABBBFFFFBBBAAABBB
AAABBBFFFFBBBAAABBB
GGGBBBFFFFBHHAAABBB
For example i want to replace BBB with YYY in line range 1 to 2 and from column 4 to 6, then obtaining this output :
AAAYYYFFFFBBBAAABBB
AAAYYYFFFFBBBAAABBB
GGGBBBFFFFBHHAAABBB
Is there a way to do it with Vim ?
Upvotes: 6
Views: 6541
Reputation: 378
Also works:
:%s/\%>3c\%<7c\%>0l\%<3lB/Y/g
c
for columns and l
for lines or rows
Upvotes: 0
Reputation: 17016
If this is always the first one you want to replace, simply don't specify /g
:1,2s/BBB/YYY/
would work fine.
Alternatively, if you need to exactly specify which column you want replaced, you can use the \%Nv
syntax, where N is the virtual column (column as it looks, so tabs are multiple columns, use c instead of v for actual columns)
Replacing the second set of B's on lines 1 and 2 could be done with:
:1,2s/\%11vBBB/YYY/
Upvotes: 4
Reputation: 79185
:1,2 s/\%3cBBB/YYY/
\%3c
means third column (see :help /\%c
or more globally :help pattern
)
Upvotes: 12