3
respostas

Linux: mais sobre o comando 'sed'

Olá amigo estudante!
Para quem ficou um pouco confuso como eu sobre o comando sed segue um para saber mais :) :
O comando sed é um utilitário de linha de comando no Unix e Linux usado para processar e transformar texto em arquivos ou streams.
Ele é conhecido como "stream editor" porque lê entrada linha por linha, aplica transformações e envia a saída para o terminal ou para outro arquivo.
É frequentemente usado para substituições, exclusões, inserções e outras manipulações de texto.
O uso mais comum do sed é a substituição de texto com o parâmetro s, que segue a sintaxe s/padrão/substituto/.
Por exemplo, para substituir a palavra "foo" por "bar" em um arquivo:

sed 's/foo/bar/' arquivo.txt

Esse comando substitui apenas a primeira ocorrência de "foo" em cada linha. Para substituir todas as ocorrências em uma linha, adiciona-se o modificador g (de global):

sed 's/foo/bar/g' arquivo.txt

É possível editar arquivos diretamente com a opção -i (in-place), o que altera o conteúdo do arquivo original:

sed -i 's/foo/bar/g' arquivo.txt

Caso queira criar um backup do arquivo original antes da substituição, pode passar uma extensão como argumento ao -i:

sed -i.bak 's/foo/bar/g' arquivo.txt

Esse comando cria uma cópia do arquivo com extensão .bak antes de modificar o original.
O sed também pode ser usado para deletar linhas com o comando d. Por exemplo, para remover todas as linhas que contêm a palavra "erro":

sed '/erro/d' arquivo.txt

Para substituir texto apenas em linhas específicas, usa-se o número da linha antes do comando. Por exemplo, para substituir "foo" por "bar" apenas na linha 2:

sed '2s/foo/bar/' arquivo.txt

Também é possível usar intervalos de linhas:

sed '2,4s/foo/bar/g' arquivo.txt

Esse comando aplica a substituição da linha 2 até a linha 4.
O sed pode inserir ou adicionar texto com os comandos i (inserir antes da linha) e a (adicionar após a linha). Por exemplo:

sed '2i\Texto inserido antes da linha 2' arquivo.txt
sed '2a\Texto adicionado após a linha 2' arquivo.txt

Para substituir apenas se uma condição for atendida, pode-se combinar padrões. Por exemplo, substituir "foo" por "bar" somente em linhas que contêm "erro":

sed '/erro/s/foo/bar/g' arquivo.txt

O comando sed também permite capturar grupos com expressões regulares usando parênteses escapados \(...\) e referenciá-los com \1, \2, etc. Exemplo de inversão de dois campos separados por espaço:

echo "Alice Bob" | sed 's/\(\w\+\) \(\w\+\)/\2 \1/'

A saída será:

Bob Alice

O sed é uma ferramenta poderosa e compacta que pode automatizar modificações em texto com muita eficiência.
Seu funcionamento baseado em padrões e comandos permite realizar desde tarefas simples até transformações complexas com poucas linhas de código.
Para entender seu funcionamento a melhor forma é praticando e fazendo testes.
Comente ai sua opinião ou sugestão.
Obrigado.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Apenas complementando...
No sed, a barra invertida (\) é usada como caractere de escape em diversas situações, incluindo quando se deseja concatenar strings em comandos que inserem ou adicionam texto, como i, a e c. Ela também é necessária para escapar caracteres especiais ou inserir novas linhas. Quando se quer quebrar uma linha de comando para melhorar a legibilidade ou inserir texto com múltiplas linhas, o uso correto da barra invertida é essencial.
Por exemplo, ao usar o comando a (append) para adicionar uma nova linha após uma linha específica, é necessário usar \ para indicar que o texto continua:

sed '2a\
Nova linha de texto' arquivo.txt

Aqui, a \ no final da linha do comando sed indica que o texto "Nova linha de texto" deve ser inserido como uma nova linha no arquivo após a linha 2. Sem essa barra invertida, o sed apresentará erro ou não executará o comando corretamente.
Outro exemplo com i (insert), que insere antes de uma linha:

sed '3i\
Texto inserido antes da linha 3' arquivo.txt

Para concatenar múltiplas linhas dentro do comando sed, pode-se usar várias quebras com \:

sed '4a\
Primeira linha\
Segunda linha\
Terceira linha' arquivo.txt

Este comando adiciona três novas linhas após a linha 4. Cada nova linha precisa ser iniciada com \, indicando que o conteúdo pertence à mesma operação de inserção.
É importante lembrar que, ao escrever scripts sed com múltiplas linhas em shells como o Bash, a sintaxe pode exigir aspas simples e o uso da barra invertida de forma exata para evitar erros de interpretação do shell.
A \ também é usada para escapar caracteres especiais dentro de padrões ou substituições, como:

sed 's/\/home\/usuario/\/mnt\/backup/' arquivo.txt

Ou para capturar grupos em expressões regulares:

echo "abc123" | sed 's/\([a-z]*\)\([0-9]*\)/\2\1/'

Esse comando inverte a posição dos grupos de letras e números, resultando em 123abc.
A barra invertida é, portanto, uma parte fundamental da sintaxe do sed, seja para concatenar, escapar ou manipular strings de forma mais flexível e segura.
Comenta ai suas duvidas ou sugestões.
Bons estudos.

Oi, Ronaldo.

Agradeço por compartilhar.

Gostei muito da sua explicação sobre o uso do sed e da barra invertida (\). Você mostrou com clareza como ela é usada para escapar caracteres especiais e concatenar linhas, o que é algo que costuma gerar dúvidas no início.

Continue explorando o sed, ele é uma ferramenta poderosa.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Lorena.
Já te considero uma amigona!
Obrigado pela dica!
Bye :)