Slacktrek Linux

um blog sobre linux, software livre, shell script e afins

Descobrindo o Poder do sed

18 de jun de 2024 — SlackTrekBr

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:

  1. Análise e Limpeza de Logs: Filtrar e modificar arquivos de log para encontrar e corrigir erros.

    sed '/ERROR/d' /var/log/syslog
  2. Automatização de Configurações: Modificar arquivos de configuração em massa.

    sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
  3. Transformação de Dados: Manipular arquivos CSV ou de texto para integrações de dados.

    sed 's/,/;/g' data.csv > data_semicolon.csv
  4. 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.

Como usar o sed para edições de arquivos na linha de comando do linux.
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.
0.6

Tags: linux, linha-de-comando, dicas