Substituindo textos em arquivo com o comando sed

O comando sed é um programa de linha de comando que oferece um modo de parsing de texto e transformação orientado a linhas. Ele se utiliza de uma sintaxe dedicada e também tem suporte a Expressões Regulares. Uma das aplicações é substituir algum texto de um arquivo.

Vamos supor que temos um um arquivo input.txt em que possui no seu texto uma palavra hello. O que queremos é substituir para world. Segue o exemplo do conteúdo:

Hi,

My name is Gilson and Hello There!
And hello to his family.

E para alterar isso podemos utilizar a seguinte sintaxe:

sed SCRIPT INPUTFILE...

Em que SCRIPT é o local que o programa vai executar as transformações com base no seu sintaxe e também via RegeX.

Com isso podemos utilizar a sintaxe interna do programa com o s/<old>/<new>/[<flag>, ...] para alterar hello para world:

sed 's/hello/world/' input.txt

Usando dessa forma, por padrão o sed irá utilizar a saída padrão para trazer o resultado da substituição:

sed 's/hello/world/' input.txt                                                                                                                                                                                                                                                                                                                                          
Hi,

My name is Gilson and Hello There!
And world to his family.

Caso precisa fazer a alteração no próprio arquivo e por todas as ocorrências encontradas, podemos utilizar algumas funções adicionais:

  • Argumento -i: utilizado para aplicar uma mudança in-place, sem saída padrão.
  • Flag g do comando s//: utilizado para aplicar a mudança em todas as ocorrências encontradas no conteúdo
  • Flag i do comando s//: utilizado para aplicar a mudança independente de maiúscula ou minúscula (conhecido como case-insensitive).
sed -i 's/hello/world/gi' input.txt
cat input.txt
Hi,

My name is Gilson and world There!
And world to his family.

Caso queira testar os parâmetros e comandos disponíveis em um modo live preview existe uma ferramenta interessante para verificar se a sintaxe utilizada no sed está correta, é o GNU sed REPL.

image.png