Conteúdos

Substituição De Strings No Vim

Substituição de Caracteres/Palavras

Algo que ajuda bastante na administração de servidores *nix é saber usar bem o editor vi. O vi ou vim é um dos mais populares editores do mundo unix e pode ser encontrado em quase todos os SO’s unix based.

Uma tarefa muito chata e relativamente frequênte na adm. de servidores é a edição de arquivos onde temos de substituir várias ocorrências de uma string por outra. Mas esse é um problema de fácil solução com os comandos do vi.

Vamos a um exemplo, digamos que temos o arquivo teste.txt com o seguinte conteúdo:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Você notou que numa lista de e-mails o domínio veio errado e precisa corrigir, mas seu arquivo tem mais de 50000 linhas. Quer fazer manualmente? :fontawesome-regular-laugh-wink:

Com o arquivo aberto no vi digite a sequência de comandos:

[ESC] : (Tecla ESC em seguida o dois-pontos )

Isso fará com que o editor entre no modo de comandos, a seguir digite:

%s/dominioerrado/dominiocorreto/g

Pressione ENTER. O resultado será que todas as ocorrências de dominioerrado serão substituídas por dominiocorreto, isto porque o sinal % no começo indica que o comando será executado desde a 1ª linha do arquivo, em seguida o s indica que será um comando de substituição, as strings entre / são a string original e a nova string respectivamente e o g no final indica que o comando não parará sua execução ao encontrar a 1ª ocorrência, fazendo com que a substituição ocorra do inicio ao fim do arquivo.

Uma outra utilização frequente deste mesmo comando é quando abrimos no vi um arquivo criado em um ambiente Windows e em cada quebra de linha existe um ^M. Porém neste caso em específico há uma diferença pois embora apresentado com 2 simbolos o ^M é identificado pelo vi como apenas 1 caracter, ou seja se vc tentar fazer a substituição digitando no campo da string original o caracter ^ seguido de M o comando não funcionará.

Para remover estes caracteres especiais você deve digitar:

[ESC]:

%s/[CTRL]v[CTRL]m//g

Para que o caracter ^M seja compreendido pelo editor você deverá digitar a sequência [CTRL]+v+[CTRL]+M e mantendo o segundo campo string vazio todas as ocorrências do caracter serão removidas.

Obviamente existem outras maneiras de se conseguir o mesmo resultado via linha de comando (sed… coff… coff…) mas essa fica pra uma próxima.

Abraços!