# Substituindo textos em arquivo com o comando sed

O comando [sed](https://www.gnu.org/software/sed/manual/sed.html) é 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:

```plain
Hi,

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

E para alterar isso podemos utilizar a seguinte sintaxe:

```bash
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`:

```bash
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:

```bash
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_).

```bash
sed -i 's/hello/world/gi' input.txt                                                                                                                                                                                                                                                                                                                                          
```

```bash
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](https://sed.js.org/).


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1666722317619/3puqAc_GY.png align="left")

