Linux comando sed fácil
---
Comando Sed no Linux com exemplos - o comando sed é um editor de fluxo e pode executar muitas funções em arquivos como, pesquisar, localizar e substituir, inserção ou exclusão. Embora o uso mais comum do comando sed seja para substituição ou para localizar e substituir. Usando o sed, você pode editar arquivos mesmo sem abri-lo, o que é uma maneira muito mais rápida de encontrar e substituir algo no arquivo, do que primeiro abrindo esse arquivo num editor de texto, por exemplo o vim e depois alterando-o.
---
O sed é um poderoso editor de fluxo de texto. Pode fazer inserção, exclusão, pesquisa e substituição. O comando sed suporta expressão regular, o que permite executar uma correspondência complexa de padrões.
---
Sintaxe:
sed OPÇÕES... [SCRIPT] [ARQUIVO DE ENTRADA...]
---
Verifique a versão do sed:
sed --version
---
Substituição básica de texto:
echo "Linguagem Bash Script" | sed 's/Bash/Perl/'
---
Resultado é algo parecido com isto:
~:$ echo "Linguagem Bash Script" | sed 's/Bash/Perl/'
Linguagem Perl Script
~:$
---
Comando:
echo 'Domingo' | sed 's/Domingo/Domingo é feriado/'
---
Resultado é algo parecido com isto:
~:$ echo 'Domingo' | sed 's/Domingo/Domingo é feriado/'
Domingo é feriado
---
Comando:
echo 'Segunda' | sed 's/Segunda/Segunda é dia comercial/'
---
Resultado é algo parecido com isto:
~:$ echo 'Segunda' | sed 's/Segunda/Segunda é dia comercial/'
Segunda é dia comercial
---
Executo:
echo 'Terça' | sed 's/Terça/Terça não é feriado/'
---
Resultado é algo parecido com isto:
~:$ echo 'Terça' | sed 's/Terça/Terça não é feriado/'
Terça não é feriado
---
Executo:
echo 'linux é um clone do unix mas é linux' | sed 's/unix/linux/'
echo 'linux é um clone do unix mas linux não é unix' | sed 's/unix/linux/'
---
Resultado:
~:$ echo 'linux é um clone do unix mas é linux' | sed 's/unix/linux/'
linux é um clone do linux mas é linux
~:$ echo 'linux é um clone do unix mas linux não é unix' | sed 's/unix/linux/'
linux é um clone do linux mas linux não é unix
---
Lembro que: por padrão, o comando sed substitui somente a primeira ocorrência do padrão em cada linha e não substitui a segunda, terceira ... ocorrência na linha.
---
E em um arquivo de texto em um diretório?
---
Crio um diretório para testes. Dentro deste diretório, crio um arquivo de texto .txt chamado de 'texto-teste-sed.txt' com o seguinte:
O unix é ótimo.
O unix é de código aberto.
unix é sistema operacional livre.
aprenda sistema operacional.
unix linux qualquer unix ou linux você pode escolher.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.
Segunda
Terça
Quarta
Quinta
Sexta
Sábado
Domingo
---
Dá para fazer isto pelo terminal:
cd
mkdir TESTES
cd TESTES
touch texto-teste-sed.txt
echo -e 'O unix é ótimo. \nO unix é de código aberto. \nunix é sistema operacional livre. \naprenda sistema operacional. \nunix linux qualquer unix ou linux você pode escolher. \nO unix é fácil de aprender. \no unix é um sistema operacional multiusuário. \nAprenda unix. \nO unix é uma ferramenta poderosa. \nOs sistemas Linux OS são ótimos. \nAproveite os sistemas Linux OS. \nSegunda \nTerça \nQuarta \nQuinta \nSexta \nSábado \nDomingo' > texto-teste-sed.txt
---
Como remover o espaço em branco do final das linhas?
Use um espaço em branco simples * ou [: blank:] * para remover todos os espaços possíveis no final da linha:
sed 's/ *$//' texto-teste-sed.txt
sed 's/[[:blank:]]*$//' texto-teste-sed.txt
---
Acontece muito:
Eu queria encontrar o texto chamado "foo" e substituído por "bar" no arquivo chamado "hosts.txt". Como uso o comando sed para localizar e substituir em sistemas Linux? O sed significa editor de stream. Ele lê o arquivo fornecido, modificando a entrada conforme especificado por uma lista de comandos sed. Por padrão, a entrada é gravada na tela, mas você pode forçar a atualização do arquivo.
O procedimento para alterar o texto em arquivos no Linux usando sed? Use o Stream EDitor (sed) da seguinte maneira:
sed -i 's/texto-antigo/novo-texto/g' texto-teste-sed.txt
O s é o comando substituto do sed para encontrar e substituir.
Ele diz ao sed para encontrar todas as ocorrências de 'texto antigo' e substituí-lo por 'novo texto' em um arquivo chamado input.txt.
Verifique se o arquivo foi atualizado:
more input.txt
---
Exemplo:
sed -i 's/Domingo/Bolhas/g' texto-teste-sed.txt
cat texto-teste-sed.txt
more texto-teste-sed.txt
---
Para deixar parecido com o que era antes:
sed -i 's/Bolhas/Domindo/g' texto-teste-sed.txt
cat texto-teste-sed.txt
more texto-teste-sed.txt
---
A sintaxe para encontrar e substituir textos usando sed?
sed 's/palavra1/palavra2/g' input.file
---
Como usar o sed para corresponder à palavra e executar encontrar e substituir? Neste exemplo, encontre apenas a palavra 'amor' e substitua-a por 'doente' se o conteúdo da linha for uma sequência específica, como FOO:
touch input.txt
echo -e "Amar é amor amor \nAmor é amar amor \nAmar é FOO amor amor" > input.txt
more input.txt
sed -i -e '/FOO/s/amor/doente/' input.txt
Para verificar as mudanças:
cat input.txt
---
Resultado:
~/bin:$ touch input.txt
~/bin:$ echo -e "Amar é amor amor \nAmor é amar amor \nAmar é FOO amor amor" > input.txt
~/bin:$ more input.txt
Amar é amor amor
Amor é amar amor
Amar é FOO amor amor
~/bin:$ sed -i -e '/FOO/s/amor/doente/' input.txt
~/bin:$ cat input.txt
Amar é amor amor
Amor é amar amor
Amar é FOO doente amor
~/bin:$
---
Substituindo ou sobrescrevendo uma string: o comando Sed é usado principalmente para substituir o texto em um arquivo. O comando sed simples abaixo substitui a palavra "unix" por "linux" no arquivo.
sed 's/unix/linux/' texto-teste-sed.txt
---
Aqui o "s" especifica a operação de substituição. Os "/" são delimitadores. O "unix" é o padrão de pesquisa e o "linux" é a string de substituição. Por padrão, como lembrei, o comando sed substitui a primeira ocorrência do padrão em cada linha e não substitui a segunda, terceira ... ocorrência na linha.
---
Resultado é algo parecido com isto:
TESTES:$ sed 's/unix/linux/' texto-teste-sed.txt
O linux é ótimo.
O linux é de código aberto.
linux é sistema operacional livre.
aprenda sistema operacional.
linux linux qualquer unix ou linux você pode escolher.
O linux é fácil de aprender.
o linux é um sistema operacional multiusuário.
Aprenda linux.
O linux é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Substituindo a nésima ocorrência de um padrão em uma linha: Use os sinalizadores /1, /2 etc para substituir a primeira e a segunda ocorrência de um padrão em uma linha. O comando abaixo substitui a segunda ocorrência da palavra "unix" por "linux" em uma linha.
sed 's/unix/linux/2' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed 's/unix/linux/2' texto-teste-sed.txt
O unix é ótimo.
O unix é de código aberto.
unix é sistema operacional livre.
aprenda sistema operacional.
unix linux qual um você pode escolher.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Substituindo toda a ocorrência do padrão em uma linha: O sinalizador substituto /g (substituição global) especifica o comando sed para substituir todas as ocorrências da sequência na linha.
sed 's/unix/linux/g' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed 's/unix/linux/g' texto-teste-sed.txt
O linux é ótimo.
O linux é de código aberto.
linux é sistema operacional livre.
aprenda sistema operacional.
linux linux qual um você pode escolher.
O linux é fácil de aprender.
o linux é um sistema operacional multiusuário.
Aprenda linux.
O linux é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Substituindo da nésima ocorrência para todas as ocorrências em uma linha: Use a combinação de /1, /2 etc e /g para substituir todos os padrões da enésima ocorrência de um padrão em uma linha. O comando sed a seguir substitui a terceira, quarta, quinta ... palavra "unix" pela palavra "linux" em uma linha.
sed 's/unix/linux/3g' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed 's/unix/linux/3g' texto-teste-sed.txt
O unix é ótimo.
O unix é de código aberto.
unix é sistema operacional livre.
aprenda sistema operacional.
unix linux qual um você pode escolher.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Parênteses no primeiro caractere de cada palavra: Este exemplo sed imprime o primeiro caractere de cada palavra entre parênteses.
echo "Bem Vindo Ao Semanickz Blog!" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
---
Resultado é algo parecido com isto:
TESTES:$ echo "Bem Vindo Ao Semanickz Blog!" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(B)em (V)indo (A)o (S)emanickz (B)log!
TESTES:$
---
Substituindo a sequência em um número de linha específico: Você pode restringir o comando sed para substituir a sequência em um número de linha específico. Um exemplo é:
sed '3 s/unix/linux/' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed '3 s/unix/linux/' texto-teste-sed.txt
O unix é ótimo.
O unix é de código aberto.
linux é sistema operacional livre.
aprenda sistema operacional.
unix linux qual um você pode escolher.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Duplicar a linha substituída com o sinalizador / p: O sinalizador de impressão / p imprime a linha substituída duas vezes no terminal. Se uma linha não possui o padrão de pesquisa e não é substituída, o / p imprime essa linha apenas uma vez.
sed 's/unix/linux/p' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed 's/unix/linux/p' texto-teste-sed.txt
O linux é ótimo.
O linux é ótimo.
O linux é de código aberto.
O linux é de código aberto.
linux é sistema operacional livre.
linux é sistema operacional livre.
aprenda sistema operacional.
linux linux qual um você pode escolher.
linux linux qual um você pode escolher.
O linux é fácil de aprender.
O linux é fácil de aprender.
o linux é um sistema operacional multiusuário.
o linux é um sistema operacional multiusuário.
Aprenda linux.
Aprenda linux.
O linux é uma ferramenta poderosa.
O linux é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
TESTES:$
---
Imprimindo apenas as linhas substituídas: Use a opção -n junto com o sinalizador de impressão / p para exibir apenas as linhas substituídas. Aqui, a opção -n suprime as linhas duplicadas geradas pelo sinalizador / p e imprime as linhas substituídas apenas uma vez.
sed -n 's/unix/linux/p' texto-teste-sed.txt
OBS:
Se você usar -n sozinho sem /p, o sed não imprimirá nada.
---
Resultado é algo parecido com isto:
TESTES:$ sed -n 's/unix/linux/p' texto-teste-sed.txt
O linux é ótimo.
O linux é de código aberto.
linux é sistema operacional livre.
linux linux qual um você pode escolher.
O linux é fácil de aprender.
o linux é um sistema operacional multiusuário.
Aprenda linux.
O linux é uma ferramenta poderosa.
TESTES:$
---
Substituindo a sequência em um intervalo de linhas: Você pode especificar um intervalo de números de linhas no comando sed para substituir uma sequência.
sed '1,3 s/unix/linux/' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed '1,3 s/unix/linux/' texto-teste-sed.txt
O linux é ótimo.
O linux é de código aberto.
linux é sistema operacional livre.
aprenda sistema operacional.
unix linux qual um você pode escolher.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Aqui, o comando sed substitui as linhas com intervalo de 1 a 3.
sed '2,$ s/unix/linux/' texto-teste-sed.txt
OBS:
Aqui $ indica a última linha do arquivo. Portanto, o comando sed substitui o texto da segunda linha para a última linha no arquivo.
---
TESTES:$ sed '2,$ s/unix/linux/' texto-teste-sed.txt
O unix é ótimo.
O linux é de código aberto.
linux é sistema operacional livre.
aprenda sistema operacional.
linux linux qual um você pode escolher.
O linux é fácil de aprender.
o linux é um sistema operacional multiusuário.
Aprenda linux.
O linux é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Excluindo linhas de um arquivo específico: o comando SED também pode ser usado para excluir linhas de um arquivo específico. O comando SED é usado para executar a operação de exclusão sem abrir o arquivo. Exemplo:
sed '5d' texto-teste-sed.txt
---
Resultado é algo parecido com isto:
TESTES:$ sed '5d' texto-teste-sed.txt
O unix é ótimo.
O unix é de código aberto.
unix é sistema operacional livre.
aprenda sistema operacional.
O unix é fácil de aprender.
o unix é um sistema operacional multiusuário.
Aprenda unix.
O unix é uma ferramenta poderosa.
Os sistemas Linux OS são ótimos.
Aproveite os sistemas Linux OS.TESTES:$
---
Para deletar a última linha:
sed '$d' texto-teste-sed.txt
---
Para excluir uma linha do intervalo x até y
sed '3,6d' texto-teste-sed.txt
---
Para excluir da enésima até a última linha
sed '12,$d' texto-teste-sed.txt
---
Para excluir a linha correspondente de padrão
sed '/abc/d' texto-teste-sed.txt
---
É interessante de ler a man page do sed. Praticar alterando estes exemplos em outros arquivos de texto que criar.
---