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 osed
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.
GO TO FULL VERSION