Descobrindo o Poder do sed
O utilitário de edição de texto do Linux, sed, abreviação de "stream editor", é uma ferramenta poderosa e versátil no arsenal de qualquer administrador de sistemas Linux. Criado para realizar operações de edição em fluxo, sed é ideal para manipular e transformar texto em arquivos e streams de dados. Com sed, é possível realizar substituições, deletar linhas, inserir texto e muito mais, tudo isso diretamente da linha de comando. Vamos explorar o comando sed, entender sua sintaxe e examinar alguns exemplos práticos que demonstram seu uso, desde tarefas simples até operações mais avançadas.
Introdução ao sed
O sed processa texto linha por linha e aplica instruções especificadas pelo usuário. A sintaxe básica do comando sed é:
sed [opções] 'comando' arquivo
Onde:
- opções: Flags opcionais que modificam o comportamento do sed.
- comando: A operação que será realizada no texto.
- arquivo: O arquivo de texto que será processado.
Exemplo Básico: Substituição Simples
Um dos usos mais comuns do sed é a substituição de texto. O comando s (substitute) é usado para substituir uma ocorrência de um padrão por outro. Veja um exemplo básico:
sed 's/antigo/novo/' arquivo.txt
Neste exemplo, a primeira ocorrência da palavra "antigo" encontrada nas linhas do arquivo.txt será substituída por "novo".
Substituição Global
Para substituir todas as ocorrências de um padrão nas linhas, utilizamos o sufixo g (global):
sed 's/antigo/novo/g' arquivo.txt
Usando sed com Expressões Regulares
O sed suporta expressões regulares, permitindo manipulações de texto mais complexas. Por exemplo, para substituir qualquer sequência de dígitos por "NUMERO":
sed 's/[0-9]\+/NUMERO/g' arquivo.txt
Deletando Linhas
Também é possível deletar linhas específicas com sed. Para deletar a linha 2 de um arquivo:
sed '2d' arquivo.txt
Para deletar todas as linhas que contêm um determinado padrão:
sed '/padrão/d' arquivo.txt
Inserindo e Acrescentando Texto
Para inserir texto antes de uma linha específica, usamos o comando i (insert). Para acrescentar texto após uma linha específica, usamos o comando a (append). Por exemplo, para inserir uma linha de texto antes da linha 3:
sed '3i\Texto inserido antes da linha 3' arquivo.txt
E para acrescentar uma linha de texto após a linha 4:
sed '4a\Texto acrescentado após a linha 4' arquivo.txt
Exemplos Avançados
Substituição com Backreferences Sed permite o uso de backreferences para reutilizar partes do texto original na substituição. Por exemplo, para inverter a ordem de duas palavras separadas por um espaço:
echo "palavra1 palavra2" | sed 's/\([a-zA-Z]\+\) \([a-zA-Z]\+\)/\2 \1/'
Editando Múltiplos Arquivos
Para aplicar um comando sed a múltiplos arquivos, podemos utilizar o recurso de redirecionamento da shell:
sed 's/erro/correção/g' *.txt
Criando Scripts sed
Para operações mais complexas, podemos salvar comandos sed em um arquivo script e executá-lo. Por exemplo, criando um arquivo script.sed:
s/erro/correção/g
s/falha/sucesso/g
/DEBUG/d
E executando-o:
sed -f script.sed arquivo.txt
Alterando linhas após um padrão de busca
Para modificar arquivos com atualizações contantes, por exemplo, é possível criar "âncoras" para indicar ao sed as linhas seguintes ao padrão a serem modificadas. Neste caso não é a palavra PADRAO que será modificada e sim a palavra1 pela palavra2 que a segue.
sed -i '/PADRAO/{ n; s/palavra1/palavra2/}' arquivo.txt
Inserindo linhas após ou antes de um padrão de busca
Para inserir novas linhas antes de um padrão de busca usamos a letra i e para inserir depois usamos a letra a no comando:
sed -i '/PADRAO/i TEXTO_A_SER_INSERIDO' arquivo.txt
sed -i '/PADRAO/a TEXTO_A_SER_INSERIDO' arquivo.txt
Exibir linha seguinte ao padrão
Para apenas exibir a linha seguinte encontrada após um padrão de busca:
sed -n '/PADRAO/{ n; p }' arquivo.txt
Para que o comando exiba a linha seguinte apenas ao encontrar o primeiro padrão:
sed -n '/PADRAO/{ n; p; q }' arquivo.txt
Casos de Uso na Administração de Sistemas
Os administradores de sistemas podem usar sed para diversas tarefas diárias:
-
Análise e Limpeza de Logs: Filtrar e modificar arquivos de log para encontrar e corrigir erros.
sed '/ERROR/d' /var/log/syslog
-
Automatização de Configurações: Modificar arquivos de configuração em massa.
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
-
Transformação de Dados: Manipular arquivos CSV ou de texto para integrações de dados.
sed 's/,/;/g' data.csv > data_semicolon.csv
-
Uso com variáveis: Para inserir variáveis em um comando sed é necessário fechar e abrir as aspas simples e duplas para inserção das mesmas.
sed 's/'"$VARIAVEL1"'/'"$VARIAVEL2"'/g' arquivo.txt
Conclusão
O sed é uma ferramenta essencial para qualquer administrador de sistemas Linux. Sua capacidade de editar texto em fluxo, suportando desde substituições simples até transformações complexas usando expressões regulares, faz dele um utilitário poderoso para a automação de tarefas e a manipulação eficiente de dados. Com a prática e o domínio de sed, tarefas que poderiam ser tediosas e demoradas podem ser realizadas de forma rápida e elegante diretamente da linha de comando.
Tags: linux, linha-de-comando, dicas