Está precisando substituir textos, remover linhas, filtrar informações e fazer alterações em arquivos diretamente pelo terminal sem necessidade de uma edição interativa ?
O comando sed pode fazer todas essas tarefas, sem sequer abrir um editor de texto interativo, poupando tempo.
Neste artigo, você vai entender como o comando sed funciona, aprender a usa-lo com exemplos práticos que podem ser utilizados na administração de sistemas linux.
Pré-requisitos
Para seguir os conhecimentos técnicos apresentados no artigo, você precisará:
- Computador com distribuição linux instalada, como: ubuntu, debian, redhat ou derivados.
- Acessar o terminal com usuário root ou comando sudo para instalar o sed, caso não esteja instalado.
- Conhecimentos básicos da linha de comando do linux ou leitura prévia do artigo sobre o tema.
Para que serve o comando sed ?
O comando sed é uma ferramenta projetada para filtrar e transformar fluxo de dados textuais através da linha de comando, ele não requer a abertura do arquivo em uma interface, como é feito por editores de texto (como Vi/Vim ou Nano).
O sed linux lê dados da entrada (seja de um arquivo ou via pipe) linha por linha, aplica as instruções fornecidas e envia o resultado para a saída padrão. Ele também possibilita fazer múltiplas alterações em arquivos instantaneamente usando a interface de linha de comando.
O comando sed já vêm instalado por padrão na maioria das distribuições linux, mas caso não esteja presente no Debian ou Ubuntu, utilize o gerenciador de pacotes apt para instala-lo:
apt update
apt install sed -yEm distros Red Hat, AlmaLinux e Rocky Linux, instale o pacote sed executando o comando:
dnf install sed -yAprendendo a usar o comando sed
Para utilizar o comando sed é necessário primeiro entender sua sintaxe, que é:
sed [opções] “comando” “arquivo”Explicação:
sed – É o programa que altera o arquivo ou o fluxo de texto recebido a partir da entrada padrão.
opções – São as opções (opcionais) que alteram o que o comando sed faz por padrão.
comando – Indica o que o sed deve fazer com as linhas que está processando.
arquivo – É o arquivo sobre o qual o comando será executado. Se nenhum arquivo for informado, o sed lê dados da entrada padrão (stdin) através de PIPES.
Ao executar o sed o seu comando (instrução) geralmente fica entre aspas para impedir que o shell interprete como caracteres especiais, veja o exemplo a seguir:
sed 's/srvdc/srvad01/g' /etc/hosts
Para facilitar, a tabela abaixo contém opções mais usadas pelo sed para uma consulta rápida:
| Opção | Descrição | Exemplos de uso |
|---|---|---|
| -i | Edita o arquivo em vez de exibir na tela. | sed -i ‘s/DB/DB_NAME/’ app.cfg |
| -i.bkp | Igual à opção “-i”, mas cria um backup do arquivo antes de realizar alteração. | sed -i.bak ‘s/DB/DB_NAME/’ app.cfg |
| -n | Somente exibe na tela quando você manda explicitamente, normalmente usando a instrução “p”. | sed -n ‘/error/p’ system.log |
| -e | Permite executar múltiplos comandos sed em uma única linha. | sed -e ‘/error/p’ -e ‘s/avc/AVC/’ system.log |
-f | Lê comandos de um arquivo de script. | sed -f script.sed dados.txt |
-E | Utiliza expressões regulares estendidas. | sed -E ‘s/[0-9]+/800/’ file.conf |
Para aprender mais sobre o comando sed a seguir tem vários exemplos práticos de uso explicado em detalhes.
Substituir a primeira ocorrência de um texto por linha
Para substituir uma informação utilize o comando “s” do sed, por exemplo, você pode precisar alterar a primeira a palavra “HTTP” encontrada por linha por “HTTPS” de um arquivo sem modificar o resto.
sed 's/HTTP/HTTPS/' app.conf
O comando acessa o arquivo “app.conf” e altera a primeira palavra “HTTP” encontrada em cada linha para “HTTPS”, em seguida o sed linux envia o resultado para a tela.
Saiba que o sed não altera o arquivo, a menos que use a opção “-i“, podendo testar o padrão antes de aplicar a alteração definitiva.
Substituir todas as ocorrências de um texto na mesma linha
No exemplo anterior foi substituída somente a primeira ocorrência encontrada por linha, mas muitas vezes, uma linha contém múltiplos parâmetros antigos com valores iguais e que devem ser atualizados simultaneamente.
O exemplo seguir, o comando sed altera todos os endereços “127.0.0.1” por “122.200.201.1” em qualquer linha.
sed 's/127.0.0.1/122.200.201.1/g' app.conf
A adição do comando “g” no final indica alteração global. Isso garante que, no exemplo, se o IP antigo aparecer três vezes na mesma linha, todos os três serão trocados pelo IP novo.
Salvar as alterações no arquivo
O comando sed pode utilizar a opção “-i” para salvar as alterações sem exibir na tela sua saída. Essa opção é necessária quando você precisa aplicar uma mudança permanente em um arquivo sem redirecionar a saída.
sed -i 's/Level Debug=True/Level Debug=False/g' app.conf
O exemplo acima mostra como substituir todas as ocorrências “Level Debug=True” por “Level Debug=False” no arquivo de configuração “app.conf”.
É útil para alterar configurações em um ou mais arquivos sem precisar abri-los com editor de texto como vim ou nano.
Altera o arquivo e cria um backup antes
Alterar arquivos críticos em servidores de produção é sempre um risco sem um backup prévio. Você pode utilizar a opção “-i” do comando sed seguido de uma extensão (exemplo: “.bak”) para criar uma cópia antes de efetivar a alteração, veja o exemplo de uso:
sed -i.bak 's/Timeout 30/Timeout 60/g' app.conf
O comando sed gera automaticamente o backup “app.conf.bak” com o conteúdo original e realiza a substituição no arquivo “app.conf”.
Deletando linhas
O programa sed pode também remover linhas de um arquivo, utilizando o comando “d” após o número da linha. Por exemplo, para remover a configuração da linha número 5 de um arquivo.
sed '5d' server.confA instrução “5d” apaga a quinta linha do arquivo “server.conf“.
Também é possível apagar um intervalo específico do arquivo, veja um exemplo de uso:
sed '10,20d' app.confO comando sed acima, remove todo o bloco de código da linha 10 até a linha 20. Pode ser usado para apagar trechos grandes de código.
Remover linhas em branco e comentadas
Já precisou apagar linhas em branco de um script ou arquivo de configuração sem precisar usar um editor de texto ? Pois é, o comando sed também pode fazer isso para você.
Alguns arquivos de configuração contém muitas linhas vazias, para apagar, para removê-las execute o sed:
sed -i '/^$/d' server.conf
Na expressão regular “^$“, o caractere “^” (circunflexo) identifica o início e “$” (cifrão) o fim da linha, sendo assim, uma linha sem caracteres entre eles. A instrução “d” remove essas linhas vazias do arquivo (server.conf).
Também é possível apagar comentários de arquivos de configuração de serviços como Nginx, Samba ou Squid, arquivos costumam vir repletos de comentários.
sed -i '/^#/d' app1.confO código ‘/^#/d‘ deleta todas as linhas que começam com o caractere “#” cerquilha, deixando a visualização mais limpa.
Exibindo apenas linhas que correspondem a um padrão
O comando sed pode fazer o mesmo trabalho do utilitário grep, mas utilizando uma lógica um pouco diferente. No exemplo, a seguir é buscado pela palavra “ERROR” no arquivo “app.log”.
sed -n '/ERROR/p' app.log
A opção “-n” desativa a exibição padrão e o comando “p” (print) imprime apenas as linhas que contêm o termo “ERROR“, não exibindo o restante do log. Podendo ser utilizado para encontrar erros nos registros da aplicação sem mostrar todo o conteúdo.
Substituir texto ignorando maiúsculas e minúsculas
O comando sed difere letras MAIÚSCULAS e minúsculas ao buscar um padrão para ser substituído. Veja a seguir um exemplo que faz o sed ignorar o case-sensitive, procurando padrões com grafias mistas: “false“, “False“, “FALSE“:
sed 's/false/True/gi' app.conf
No exemplo, o comando “i” logo após o “g” no final instrui o programa sed a ignorar a diferença entre maiúsculas e minúsculas ao realizar a troca, assim a palavra pesquisada (no exemplo é false) pode corresponder com “false”, “False” ou “FALSE” e vai ser substituída por “True”.
Inserir uma linha antes de uma ocorrência específica
Em arquivos de configurações ou scripts é uma prática comum adicionar comentários antes do código, explicando o que ele faz. O comando sed pode ser usado para esse fim.
Por exemplo imagine que você precisa adicionar uma nova linha com o seguinte conteúdo “# Configuração do endereço” antes do código “ip_address=10.10.20.5” no arquivo “addresses.cfg”, execute:
sed '/ip_address=10.10.20.5/i \# Configuração do endereço' addresses.cfgNesse contexto a instrução “i” (insert) insere o texto que vêm após o caractere “\” antes da linha que contém o código pesquisado (“ip_address=10.10.20.5”).
Adicionar uma linha depois de uma ocorrência específica
Já precisou adicionar um novo conteúdo após um termo específico em um arquivo ? O sed pode injetar diretivas logo abaixo de um parâmetro já existente.
No comando abaixo é procurado no arquivo “server.conf” o código “listen 80 default_server”, caso seja encontrado é adicionado o código após o caractere “\” que é “listen 443 default_server;”.
sed '/listen 80 default_server/a \listen 443 default_server;' server.conf
Após o caractere “/” (fechamento da pesquisa) o comando “a” (append) insere o novo conteúdo em uma nova linha abaixo ao padrão localizado.
Utilizando caracteres delimitadores diferentes
Existe um obstáculo que alguns iniciantes enfrentam ao utilizar o comando sed ao precisar alterar caminhos de diretórios no linux (ex: /var/www/html), o uso da barra “/” como delimitador do sed gera erros devido ao conflito de sintaxe.
O sed permite substituir o delimitador padrão “/” por qualquer outro caractere, como o “|” ou “@“. Isso evita a necessidade de utilizar barras de escape “\” em todos os diretórios.
Por exemplo, suponha que precisa alterar a localização dos arquivos do site de “/var/www/html” para “/srv/app/html” na configuração do arquivo “server.conf” de uma aplicação web, você executaria:
sed -i.bkp 's|/var/www/html|/srv/app/html|g' server.conf
O comando sed acima está usando o delimitador “|” e criando um backup “server.conf.bkp” antes de qualquer alteração do arquivo original “server.conf” e em seguida muda a localização dos arquivos do site para “/srv/app/html”.
Executar múltiplas edições em um único comando
Nesse momento, você já pode esta utilizando o comando sed para fazer alterações em arquivos, mas executar o comando para cada edição, pode ser trabalhoso, não acha ? Ao usar a opção “-e” o comando sed possibilita executar múltiplas alterações em somente um comando.
Para cada nova operação basta usar a opção “-e”, assim você consegue, por exemplo, atualizar diferentes seções de um arquivo sem precisar executar o sed várias vezes seguidas, veja o exemplo a seguir:
sed -i -e 's/Listen 80/Listen 8080/' -e 's/address 127.0.0.1/address 122.200.201.1/' app.conf
O comando sed do exemplo, primeiro altera a configuração “Listen 80” para “Listen 8080” e em seguida muda “address 127.0.0.1” para “address 122.200.201.1” no arquivo “app.conf”.
Usar expressões regulares com o comando sed
O comando sed quando combina seus comandos com expressões regulares, pode aumentar seu potencial e fazer tarefas mais complexas.
Suponha que você precisa encontrar no arquivo de log “app.log” registros com a palavra “ERROR” ou “WARNING” ou “CRITICAL”, você pode executar:
sed -En '/ERROR|WARNING|CRITICAL/p' app.logA opção “-E” é utilizada para ativar o uso de expressões regulares pelo comando sed e opção “-n” para exibir somente linhas que contém um dos padrões informados.
O caractere PIPE tem o papel de “OU”, ou seja, encontre no arquivo “app.log” a palavra “ERROR” ou “WARNING” ou “CRITICAL” e quando encontrar mostre na tela.
Outro exemplo, você trabalha com uma aplicação que quando registra erros nos logs associa cada erro a um número. O arquivo “app1.log” possui:
Error: 3498 low memory
Error: 42 critical database
Error: 1990 conetion refused
Error: 1 app1 not start
Error: 756425 file does not exist
Error: 2345 authentication failedVocê quer localizar somente os códigos de erros de 4 dígitos, para essa necessidade execute:
sed -En '/^Error: [0-9]{4} /p' app1.log
Explicação da expressão: ^[0-9]{4}
^ (circunflexo) → início da linha.
Error: → Procura literalmente no inicio da linha por “Error:” seguido de um espaço.
[0-9] → Representa um número de 0 à 9.
{4} → Exige exatamente 4 ocorrências de “[0-9]” e no final mais um espaço, porque existe um espaço entre o código numérico e a mensagem em seguida.
Gostou de aprender sobre o sed ? Para aprofundar seu conhecimento em estruturas avançadas do utilitário, é recomendável consultar o manual do comando sed online, que contém todos os detalhes.
Conclusão
O comando sed é indispensável para transformar, filtrar e substituir textos de forma ágil no Linux. Com as opções e expressões corretas, você automatiza tarefas e ganha produtividade no terminal.
Pratique os exemplos aqui apresentados em ambientes de testes e aos poucos utilize o sed na prática no trabalho.
Ficou com alguma dúvida, tem sugestões ou elogios sobre o artigo ? Deixe seu comentário abaixo!
Perguntas Frequentes (FAQ) sobre o comando sed
O comando sed altera o arquivo original ?
Não por padrão. O resultado é enviado para a saída padrão. Para alterar o arquivo, utilize a opção “-i”.
Qual a diferença entre os comandos sed e grep ?
O comando grep é utilizado para localizar e filtrar linhas que correspondem a determinado padrão. O sed, além de filtrar, consegue transformar o conteúdo, substituir textos, remover linhas e realizar outras operações de edição.
É possível reverter alterações feitas com “sed -i” ?
Não. A alteração realizada com a opção “-i” sobrescreve o arquivo. Mas você pode utilizar a opção de backup (ex: sed -i.bak), assim é criada uma cópia antes de alterar o arquivo original.
Por que meu comando sed falha ao tentar substituir caminhos de pastas ?
Isso ocorre porque o caractere “/” (barra) do caminho entra em conflito com o delimitador da instrução de substituição “s/busca/troca/“. Para corrigir, utilize outro caractere delimitador, como “|” (PIPE), exemplo: “s|/caminho/antigo|/caminho/novo|g“.
Como posso fazer o sed ignorar maiúsculas e minúsculas ?
Para ignorar a diferença de caixa na busca durante uma substituição, adicione o comando “i” ao final do bloco de comando, como no exemplo: “s/padrão/novo/gi”.

