intervalo de pesquisa Vi e substituir

2

Estou usando vi em um sistema Tru64 que não me permite usar os métodos .

Pergunta tão simples que não consigo encontrar a resposta para:

Como você concatena uma pesquisa (para o intervalo) com uma substituição? Algo que se parece com isso, mas não funciona:

:/^group/s/\w$/Test/

Para os interessados, tentei fazer isso com :

:%s/\(group\s\+\)\w/Test/
    
por Lance Roberts 15.09.2017 / 23:53

1 resposta

5

Os principais problemas aqui são o uso das notações abreviadas \w e \s . Se o editor é a implementação tradicional de vi (fontes originais de Bill Joy), então também é possível definir a opção magic que é configurada por padrão na maioria das implementações modernas de vi . Isso é feito com :set magic .

vi não entende \w e \s e notação abreviada similar para várias classes de caracteres como vim faz.

Para fazer sua substituição em vi , use

:%s/^\(group[  ][  ]*\)[0-9A-Za-z_]/Test/

De acordo com a documentação vim , \w corresponde a [0-9A-Za-z_] e \s é um espaço ou uma tabulação (há um espaço e uma tabulação em [ ] acima).

O padrão E+ , em que E é alguma expressão, pode ser substituído por EE* .

O na parte de substituição da substituição deve estar funcionando em vi (qualquer vi ). Se isso não acontecer, tente nvi ("new vi ") ou veja se você consegue instalar vim .

O original vi (empacotado como traditional-vi em pelo menos alguns sistemas BSD) precisa ter seus "caracteres especiais" (exceto ^ e $ ) escapados, como \* e \. etc Como alternativa, você pode definir a opção magic com :set magic (normalmente, esse é o padrão nas implementações vi modernas).

A substituição acima substituiria todas as ocorrências de (por exemplo)

group 1

com

group Test

Outra maneira de fazer a mesma coisa que você tentou:

:g/^group/s/[0-9A-Za-z_]$/Test/

ou apenas

:g/^group/s/.$/Test/

se você não precisa ser muito cuidadoso com o último personagem na linha.

Se você quisesse substituir a última palavra (não apenas o último caractere) na linha:

:g/^group/s/[^ ]*$/Test/

No tradicional vi sem a opção magic definida, isso pode ter que ser escrito

:g/^group/s/\[^ ]\*$/Test/
    
por 16.09.2017 / 09:22