Vim: Substitua com base em outra correspondência na linha

0

Eu tenho arquivos bastante grandes nos quais preciso substituir NX por N1 , mas somente se a linha já contiver NX como padrão. Até agora, faço isso manualmente, procurando primeiro por ocorrências de NX com:

/NX

e depois usando

'<,'>s/N1/NX

Mas os arquivos são muito grandes e longos e as chances de eu cometer um erro durante este procedimento manual são muito altas. Existe uma maneira de fazer isso de maneira mais eficiente no Vim?

Aqui está um exemplo de como uma linha em um dos arquivos pode parecer:

S22Tg    K1B12N1Tg    D1AE22K5    K2B12N1Tg    D1AE22K6    W01B12N1Tg    D1AE22TDNXW01    W02B12N1Tg    D1AE22TDNXW02    W03B12N1Tg

Note que as linhas são todas muito semelhantes e diferem apenas em termos dos números que ocorrem depois das letras.

    
por lord.garbage 05.04.2015 / 10:47

2 respostas

4

No Vim, você pode limitar sua substituição às linhas que contêm NX :

:g/NX/s/N1/NX/

Preceder a substituição com /NX/ faz com que o Vim a execute apenas na próxima linha que contém NX (usando intervalos ) e o :g faz com que seja executado em todas as linhas correspondentes NX .

    
por 05.04.2015 / 11:16
1

Você não precisa necessariamente abrir o arquivo no vim para fazer isso. Você pode fazer isso na linha de comando %código% e renomeie o sed '/NX/s/N1/NX/g' <filename> >> <newfilename> para o arquivo original.

    
por 05.04.2015 / 11:11