vi - substitua os caracteres da parte da linha

3

Eu tenho um arquivo com todas as cidades belgas. Algumas dessas cidades têm bairros.

Lier;stad;Antwerpen;49,70;33930;Lier;Koningshooikt
Knokke-Heist;gem.;WestVlaanderen;56,44;33825;Knokke;Westkapelle;Heist;Ramskapelle

Mas quero dividir os distritos com , and space em vez de ; . Então eu quero pegar isso:

Lier;stad;Antwerpen;49,70;33930;Lier, Koningshooikt
Knokke-Heist;gem.;West-Vlaanderen;56,44;33825;Knokke, Westkapelle, Heist, Ramskapelle

Eu uso vi regularmente, mas esse tipo de substituição é difícil para mim.

    
por M-Reda Daoudi 21.12.2015 / 17:35

2 respostas

3

Você pode fazer (assumindo o GNU sed ):

:%!sed 's/;/, /6g'

Para substituir o sexto a último ; por , .

Com vim usando operadores de look-behind:

:%s/\v((;.*){5})@<=;/, /g

(isto é, substitua os ; s que são precedidos por pelo menos 5 ; s).

    
por 21.12.2015 / 17:43
1

Outra maneira em vim :

:g/^/call feedkeys("nnnnna") | s/;/, /gc

A função feedkeys() usa a string nnnnna como se digitássemos no teclado, s ubstitution com gc flags tell vim para substituir todas as ocorrências pela confirmação do usuário.

Aqui, simplesmente ignoramos as 5 primeiras ocorrências por nnnnn e, em seguida, um a confirma todos os outros.

O g/^/ fez este comando ser aplicado a todas as linhas.

    
por 21.12.2015 / 18:33