我有一份关于所有比利时城市的文件。其中一些城市设有行政区。
Lier;stad;Antwerpen;49,70;33930;Lier;Koningshooikt
Knokke-Heist;gem.;WestVlaanderen;56,44;33825;Knokke;Westkapelle;Heist;Ramskapelle
, and space
但我想用而不是划分行政区;
。所以我想得到这个:
Lier;stad;Antwerpen;49,70;33930;Lier, Koningshooikt
Knokke-Heist;gem.;West-Vlaanderen;56,44;33825;Knokke, Westkapelle, Heist, Ramskapelle
我vi
经常使用,但这种替代对我来说很难。
答案1
你可以这样做(假设 GNU sed
):
:%!sed 's/;/, /6g'
将倒数第 6 个替换;
为,
.
使用vim
后视运算符:
:%s/\v((;.*){5})@<=;/, /g
(即替换;
前面至少 5 个;
s)。
答案2
另一种方式vim
:
:g/^/call feedkeys("nnnnna") | s/;/, /gc
该feedkeys()
函数使用字符串nnnnna
就像我们在键盘上键入它们一样,s
带有gc
标志的替换告诉vim
用户在确认后替换所有出现的情况。
这里我们简单地忽略了前 5 次出现的nnnnn
,然后a
确认所有其他的。
使g/^/
该命令应用于所有行。