Edição de fluxos com sed

LinuxBeginner
Pratique Agora

Introdução

Ao trabalhar com arquivos de texto no Linux, muitas vezes você precisa fazer edições automatizadas sem abrir um editor de texto interativo. Por exemplo, pode ser necessário remover um cabeçalho de um arquivo CSV, excluir linhas em branco ou extrair um intervalo específico de linhas de um arquivo de log.

Para essas tarefas, usamos o sed (editor de fluxo).

O sed é um editor de texto avançado e não interativo. Ele lê a entrada de um arquivo ou de um pipe, executa operações em cada linha e exibe o resultado. Esse modelo de “ler, transformar e exibir” é uma abordagem clássica do Unix e funciona especialmente bem em pipelines.

Esse modelo explica o nome editor de fluxo. O sed foi projetado para trabalhar com texto em fluxo, e não apenas com arquivos abertos em um editor de tela cheia. Por isso, ele se adapta tão bem a pipelines do shell e a scripts de automação.

Neste laboratório, você aprenderá a:

  1. Excluir linhas (d): remover cabeçalhos ou comentários indesejados.
  2. Remover linhas vazias: usar expressões regulares para filtrar linhas em branco.
  3. Inserir texto (i): adicionar novas linhas ao arquivo.
  4. Exibir linhas (p): extrair intervalos específicos de linhas.

Excluir linhas

Comece examinando o arquivo de exemplo.

cat /home/labex/project/data.csv

Você verá que há duas linhas de comentário no início, ambas começando com #. Queremos remover essas linhas.

Para excluir linhas no sed, usamos o comando d.

  • 1d exclui a linha 1.
  • 1,2d exclui as linhas 1 e 2.

Usar números para indicar linhas é um dos conceitos básicos do sed. Um endereço informa ao sed a qual linha ou intervalo de linhas um comando deve ser aplicado, enquanto o comando de edição informa o que fazer nessa parte.

Execute o comando a seguir para visualizar a exclusão sem modificar o arquivo:

sed '1,2d' data.csv

A saída exibirá o conteúdo do arquivo sem as duas primeiras linhas. No entanto, verifique novamente o conteúdo do arquivo:

cat data.csv

As linhas ainda estarão presentes. Por padrão, o sed envia a saída para a tela, na saída padrão, e não modifica o arquivo original. Esse é um recurso de segurança.

Para aplicar as alterações diretamente ao arquivo, usando a edição “in-place”, use a opção -i:

sed -i '1,2d' data.csv

Verifique as alterações:

cat data.csv

Agora, as linhas de cabeçalho foram removidas permanentemente.

Remover linhas vazias

O arquivo ainda contém linhas vazias que prejudicam a estrutura dos dados. Em geral, não queremos essas linhas em arquivos de dados processados.

Para removê-las, combinamos o comando de exclusão (d) com uma expressão regular (Regex).

  • ^ corresponde ao início de uma linha.
  • $ corresponde ao fim de uma linha.
  • ^$ corresponde a uma linha que começa e termina imediatamente, ou seja, uma linha vazia.

Este é um bom exemplo de como o sed combina duas camadas: um padrão de endereço e uma ação de edição. O padrão /^$/ seleciona as linhas correspondentes, e d exclui as linhas selecionadas.

O comando /^$/d informa ao sed para “excluir qualquer linha que corresponda ao padrão de linha vazia”.

Execute o comando para remover as linhas vazias diretamente no arquivo:

sed -i '/^$/d' data.csv

Verifique o resultado:

cat data.csv

Agora, o arquivo deve conter uma lista compacta de dados, sem espaços vazios entre as linhas.

Inserir texto

Agora que os comentários desnecessários foram removidos, suponha que você queira adicionar ao arquivo um cabeçalho de classificação adequado.

O comando i (Insert) adiciona texto antes da linha especificada.

  • 1i Text insere "Text" antes da linha 1.

O comando a (Append) adiciona texto depois da linha especificada.

  • 1a Text insere "Text" depois da linha 1.

Assim como os comandos de exclusão e substituição, comandos como i e a mostram que o sed não se limita a substituir conteúdo. Ele pode reestruturar o fluxo removendo, adicionando e selecionando linhas à medida que elas passam pelo processamento.

Execute o comando a seguir para inserir "Company Confidential" no início do arquivo:

sed -i '1i Company Confidential' data.csv

Verifique o conteúdo do arquivo:

cat data.csv

A nova linha foi inserida no início, deslocando todas as outras linhas para baixo.

Exibir linhas específicas

Às vezes, você não quer editar o arquivo; quer apenas extrair linhas específicas. O sed pode funcionar como uma versão mais inteligente do head ou do tail.

Por padrão, o sed exibe todas as linhas que processa. Para exibir apenas linhas específicas:

  1. Use a opção -n para suprimir a exibição automática, ativando o modo silencioso.
  2. Use o comando p para exibir explicitamente as linhas específicas.

Sem -n, o sed exibiria todas as linhas automaticamente e depois exibiria novamente as linhas selecionadas quando p fosse executado, o que costuma confundir iniciantes. A opção -n desativa o comportamento padrão para que o comando exiba apenas o que você solicitou.

Para exibir as linhas 5 a 10:

sed -n '5,10p' data.csv

Para exibir apenas a última linha, use o símbolo $ para representar o fim do arquivo:

sed -n '$p' data.csv

Isso é extremamente útil ao analisar arquivos de log grandes quando você precisa visualizar apenas uma seção específica.

Resumo

Neste laboratório, você aprendeu os conceitos básicos da edição de fluxos com sed:

  1. Exclusão (d): remover linhas específicas (1,2d) ou linhas que correspondem a um padrão (/^$/d).
  2. Inserção (i): adicionar texto ao fluxo do arquivo em locais específicos.
  3. Exibição (-n ... p): suprimir a saída padrão e exibir apenas as linhas selecionadas.
  4. Edição direta (-i): modificar o arquivo diretamente em vez de apenas exibir o conteúdo na tela.

O sed é uma ferramenta essencial para o processamento automatizado de texto e é amplamente usado em scripts do shell para gerenciamento de configurações e análise de logs.