CodeGym /Cursos /Docker SELF /Transformação de texto com sed

Transformação de texto com sed

Docker SELF
Nível 8 , Lição 1
Disponível

Transformação de texto com sed

1. Sintaxe do comando sed

O que é sed?

sed (abreviação de Stream Editor, ou editor de fluxo) é uma ferramenta poderosa pra manipulação de texto, que permite alterar, adicionar, remover ou transformar linhas em arquivos de texto e streams de dados.

A mágica principal do sed é que ele edita texto "em tempo real", sem mexer no arquivo original (a menos que você peça explicitamente). Isso faz dele uma ferramenta perfeita pra transformações rápidas e automáticas de dados.

Sintaxe básica do comando

Vamos olhar a fórmula principal pra trabalhar com o sed:

sed [opções] 'padrão/ação' arquivo

Onde:

  • padrão — o texto ou expressão regular pelo qual vai ser feita a busca.
  • ação — a operação que você quer realizar (por exemplo, substituir texto).
  • arquivo — o arquivo de texto contendo as linhas que você quer modificar.

Pra simplificar no começo, vamos focar nas ações mais populares: substituição de texto (s — de "substitute") e remoção de linhas (d — de "delete").


2. Substituição de texto s/antigo/novo/

Exemplo 1: Substituição básica de texto

Vamos supor que temos um arquivo example.txt com o seguinte conteúdo:

Hello world!
Welcome to Linux.
Linux is awesome.

Vamos tentar substituir a palavra "Linux" por sed:

sed 's/Linux/sed/' example.txt

A saída será a seguinte:

Hello world!
Welcome to sed.
sed is awesome.

Prontinho. A palavra "Linux" foi substituída por sed apenas uma vez em cada linha. Esse é o comportamento padrão.


Exemplo 2: Substituição global

Se for necessário substituir todas as ocorrências da palavra em vez da primeira em cada linha, adicione o flag g (global):

sed 's/Linux/sed/g' example.txt

Se houver múltiplas menções de "Linux" em uma linha, todas elas serão substituídas por sed.


Exemplo 3: Ignorando maiúsculas e minúsculas

Para substituir o texto sem considerar letras maiúsculas ou minúsculas, adicione o flag I (ou i, dependendo da sua versão):

sed 's/linux/sed/gi' example.txt

Isso substituirá as palavras "Linux", "LINUX", "LiNuX", etc.


Exemplo 4: Substituição salvando o resultado

Por padrão, sed apenas exibe o resultado no console, sem alterar o arquivo. Se você quiser salvar as alterações diretamente no arquivo, adicione a opção -i (in-place):

sed -i 's/Linux/sed/g' example.txt

Agora o arquivo example.txt será atualizado com as substituições.


3. Removendo linhas /padrão/d

Exemplo 1: Removendo linhas por padrão

Se você quiser remover todas as linhas que contenham a palavra "Linux":

sed '/Linux/d' example.txt

A saída será assim:

Hello world!

Aqui foram removidas as linhas onde aparece "Linux".


Removendo linhas por número

Você pode remover uma linha pelo seu número. Por exemplo, para remover a segunda linha, usamos:

sed '2d' example.txt

Saída:

Hello world!
Linux is awesome.

Removendo várias linhas: especifique um intervalo, por exemplo, remover as linhas da 2ª à 3ª:

sed '2,3d' example.txt

4. Trabalhando com expressões regulares

É aqui que o sed brilha! Nos padrões, você pode usar expressões regulares pra encontrar combinações mais complexas.

Exemplo 1: Substituindo palavras com um padrão específico

Digamos que no texto existam as seguintes linhas:

error: something went wrong
warning: check your system
error: unable to connect

A gente quer substituir todas as linhas que começam com "error" por "Issue Detected". Expressões regulares vão te ajudar nisso:

sed 's/^error:.*/Issue Detected/' logs.txt

Onde:

  • ^ — indica o começo da linha.
  • .* — significa "qualquer coisa depois".

Resultado:

Issue Detected
warning: check your system
Issue Detected

5. Inserir e adicionar linhas

Inserir uma linha antes de uma correspondência

Para inserir uma linha antes de cada linha que contém "Linux":

sed '/Linux/i\# Aprender é divertido' example.txt

Resultado:

Hello world!
Welcome to Linux.
# Aprender é divertido
Linux is awesome.

Exemplo 2: Adicionar uma linha após uma correspondência

Para adicionar texto após uma linha com o padrão:

sed '/Linux/a\# sed torna isso mais fácil' example.txt

Resultado:

Hello world!
Welcome to Linux.
# sed torna isso mais fácil
Linux is awesome.
# sed torna isso mais fácil

6. Prática: manipulando arquivos de configuração

Vamos resolver um problema prático. Imagine que você tem um arquivo de configuração chamado config.txt:

host=localhost
port=8080
mode=production
logfile=/var/log/app.log

Tarefa 1: Substituir "localhost" por "127.0.0.1"

sed -i 's/localhost/127.0.0.1/' config.txt

Resultado:

host=127.0.0.1
port=8080
mode=production
logfile=/var/log/app.log

Tarefa 2: Aumentar o número da porta em 1

Para isso, usamos o sed com um truquezinho:

sed -i 's/port=8080/port=8081/' config.txt

Resultado:

host=127.0.0.1
port=8081
mode=production
logfile=/var/log/app.log

Tarefa 3: Apagar linhas com logfile

Se a configuração não precisar mais de logs, podemos apagar a linha:

sed -i '/logfile/d' config.txt

Resultado:

host=127.0.0.1
port=8081
mode=production

7. Combinação com outros comandos

sed funciona super bem junto com outras ferramentas do Linux. Por exemplo:

grep "error" logs.txt | sed 's/error/ERROR/'

Aqui, primeiro a gente procura por linhas com erros e depois formata elas.

Erros comuns e como evitar

  • Erro: esqueceu a opção -i. Novatos geralmente esperam que o sed modifique o arquivo, mas esquecem de adicionar -i. Não se esqueça de especificar isso se quiser alterar o arquivo.
  • Erro: aspas. Em alguns sistemas, especialmente se usar aspas simples, \ antes de caracteres especiais pode não funcionar corretamente. Sempre escape os caracteres corretamente.
  • Erro com intervalos de linhas. Se você usar intervalos (tipo 2,3d), confira se estão especificados corretamente — o arquivo não pode estar vazio.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION