Como substituir uma linha por um determinado padrão no vi?

3

Estou tentando substituir linhas que contêm o padrão "s#_decoded_block[" com "s#_decoded_block_" . O comando que estou usando para fazer isso é

%s/s\d\+_decoded_block\[/s\d\+_decoded_block_/g

Espero receber "s#_decoded_block_" como substituições, mas estou recebendo "sd+_decoded_block_" . Por favor, deixe-me saber o que estou fazendo errado.

    
por slin6174 26.04.2016 / 02:41

2 respostas

2

Você parece esperar um número decimal para "#" na pergunta. Você pode fazer isso usando uma referência anterior:

%s/s\(\d\+\)_decoded_block\[/s_decoded_block_/g

em que \(\d\+\) corresponde a um ou mais dígitos decimais e é substituído usando o marcador .

Você pode melhorar a referência anterior movendo mais texto dentro dela:

%s/s\(\d\+_decoded_block\)\[/s_/g

porque será substituído pelo que foi correspondido no grupo.

    
por 26.04.2016 / 02:46
1

Não tenho certeza se ele se ajusta perfeitamente ao seu caso de uso, mas parece que você também pode usar:

:g/s\d\+_decoded_block\[/ s/\[/_/

... a menos que existam outros% caracteres [ nas linhas correspondentes anteriores àquelas que você deseja alterar.

O mais simples é melhor, se atender às suas necessidades.

    
por 26.04.2016 / 02:52

Tags