vi -- 替换部分行中的字符

vi -- 替换部分行中的字符

我有一份关于所有比利时城市的文件。其中一些城市设有行政区。

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/^/该命令应用于所有行。

相关内容