Post

Explorando o Poder do comando sed: Manipulação de Texto no Linux

Explorando o Poder do comando sed: Manipulação de Texto no Linux

Introdução

O comando sed é uma ferramenta indispensável para qualquer profissional que trabalhe com Linux. Seja para realizar substituições simples, editar arquivos em massa ou automatizar tarefas complexas, o sed se destaca pela sua versatilidade e eficiência. Este guia foi cuidadosamente elaborado para profissionais de todos os níveis, desde iniciantes até especialistas, oferecendo uma jornada completa pelo universo dessa poderosa ferramenta.

Neste tutorial, você encontrará:

  • Conceitos básicos: Como começar a usar o sed para manipular texto diretamente no terminal.
  • Exercícios práticos: Desde substituições simples até transformações avançadas em arquivos grandes.
  • Casos de uso reais: Exemplos de automação, formatação de dados e integração com outras ferramentas como grep, awk e xargs.
  • Tabela de referência rápida: Uma seção para consulta instantânea de comandos e padrões.

Seja você um administrador de sistemas, desenvolvedor ou entusiasta de tecnologia, este guia é a sua porta de entrada para dominar o sed. Vamos começar!


Exercícios de uso do comando sed

Texto proposto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
cat texto_sed.txt
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Exercícios Básicos

1.1 Substituir a palavra “exemplo” por “EXEMPLO” em todo o arquivo

Comando:

1
sed 's/\bexemplo\b/EXEMPLO/g' texto_sed.txt

Explicação:

  • s/\bexemplo\b/EXEMPLO/: Substitui a palavra exemplo por EXEMPLO.
  • \b: Delimita a palavra inteira (não afeta exemplo1 ou exemplo.com).
  • g: Substitui todas as ocorrências na linha.

1.2 Remover todas as linhas que contêm “irrelevante”

Comando:

1
sed '/irrelevante/d' texto_sed.txt

Explicação:

  • /irrelevante/: Filtra linhas que contêm a palavra irrelevante.
  • d: Deleta essas linhas.

1.3 Adicionar a linha “Nova linha adicionada” antes de todas as linhas com IPs

Comando:

1
sed '/[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/i Nova linha adicionada' texto_sed.txt

Explicação:

  • /[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/: Seleciona linhas contendo endereços IPv4.
  • i: Insere a linha especificada antes das linhas selecionadas.

1.4 Remover múltiplos espaços no início ou no final das linhas

Comando:

1
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' texto_sed.txt

Explicação:

  • ^[[:space:]]*: Remove espaços no início da linha.
  • [[:space:]]*$: Remove espaços no final da linha.
  • ;: Permite aplicar dois comandos em sequência.

1.5 Substituir o delimitador ; por | na Linha 43

Comando:

1
sed '43s/;/|/g' texto_sed.txt

Explicação:

  • 43: Aplica o comando apenas à Linha 43.
  • s/;/|/g: Substitui todos os ; por | na linha.

1.6 Substituir números inteiros por [NÚMERO]

Comando:

1
sed 's/\b[0-9]\+\b/[NÚMERO]/g' texto_sed.txt

Explicação:

  • \b[0-9]\+\b: Seleciona números inteiros (delimitados por bordas de palavras).
  • [NÚMERO]: Substitui os números selecionados pelo texto [NÚMERO].

1.7 Transformar todas as palavras em maiúsculas na Linha 19

Comando:

1
sed '19s/.*/\U&/' texto_sed.txt

Explicação:

  • 19: Aplica o comando apenas à Linha 19.
  • \U&: Converte o texto capturado (.*) para maiúsculas.

1.8 Remover linhas vazias

Comando:

1
sed '/^$/d' texto_sed.txt

Explicação:

  • /^$/: Seleciona linhas vazias (^ indica início e $ indica fim da linha sem conteúdo).
  • d: Deleta as linhas selecionadas.

1.9 Substituir “https” por “http” nas URLs

Comando:

1
sed 's/https:/http:/g' texto_sed.txt

Explicação:

  • s/https:/http:/: Substitui https: por http:.
  • g: Garante que todas as ocorrências em cada linha sejam alteradas.

1.10 Adicionar o texto “[EDITADO]” ao final de cada linha que contenha “sed”

Comando:

1
sed '/\bsed\b/s/$/ [EDITADO]/' texto_sed.txt

Explicação:

  • /\bsed\b/: Seleciona linhas que contêm a palavra sed inteira.
  • s/$/ [EDITADO]/: Adiciona [EDITADO] ao final da linha ($ representa o final da linha).

Resumo dos Comandos Básicos

ExercícioComando PrincipalFunção
1.1s/\bexemplo\b/EXEMPLO/gSubstituir “exemplo” por “EXEMPLO”.
1.2/irrelevante/dRemover linhas contendo “irrelevante”.
1.3/[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)...Adicionar linha antes de linhas com IPs.
1.4s/^[[:space:]]*//;s/[[:space:]]*$//Remover espaços no início ou fim das linhas.
1.543s/;/|/gSubstituir ; por | na Linha 43.
1.6s/\b[0-9]\+\b/[NÚMERO]/gSubstituir números inteiros por [NÚMERO].
1.719s/.*/\U&/Converter texto da Linha 19 para maiúsculas.
1.8/^$/dRemover linhas vazias.
1.9s/https:/http:/gSubstituir https por http em URLs.
1.10/\bsed\b/s/$/ [EDITADO]/Adicionar “[EDITADO]” ao final de linhas com “sed”.

Desafios - Exercícios Básicos

1.1 Substituir palavras específicas apenas em uma linha

Pergunta:

  • Como você substituiria sed por SED apenas na Linha 15?

Resposta Esperada:

1
sed '15s/sed/SED/' texto_sed.txt

1.2 Adicionar texto ao início de linhas específicas

Pergunta:

  • Qual comando adicionaria # Comentário ao início das linhas contendo “texto especial”?

Resposta Esperada:

1
sed '/texto especial/s/^/# Comentário /' texto_sed.txt

1.3 Identificar e remover espaços extras

Pergunta:

  • Como remover espaços no final das linhas, mas manter os do início?

Resposta Esperada:

1
sed 's/[[:space:]]*$//' texto_sed.txt

Exercícios Intermediários

2.1 Extrair todas as datas no formato AAAA-MM-DD

Comando:

1
sed -n 's/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p' texto_sed.txt

Explicação:

  • -n: Suprime a saída padrão.
  • s/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p:
    • Captura datas no formato AAAA-MM-DD usando regex.
    • p: Imprime apenas as capturas.

2.2 Substituir e-mails pelo texto [EMAIL_OCULTADO]

Comando:

1
sed 's/[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,6\}/[EMAIL_OCULTADO]/g' texto_sed.txt

Explicação:

  • [a-zA-Z0-9._%+-]\+: Captura a parte local de um e-mail.
  • @[a-zA-Z0-9.-]\+: Captura o domínio.
  • \.[a-zA-Z]\{2,6\}: Captura a extensão do domínio.
  • Substitui e-mails encontrados por [EMAIL_OCULTADO].

2.3 Transformar listas delimitadas por vírgulas em listas numeradas (Linha 42)

Comando:

1
sed '42s/\([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\)/1. \1\n2. \2\n3. \3\n4. \4/' texto_sed.txt

Explicação:

  • 42: Aplica o comando apenas à Linha 42.
  • \([^,]*\): Captura palavras separadas por vírgulas.
  • 1. \1\n2. \2\n...: Formata como uma lista numerada, usando \n para quebra de linha.

2.4 Adicionar o texto [PRIVADO] antes de todas as linhas com senhas

Comando:

1
sed '/password/i [PRIVADO]' texto_sed.txt

Explicação:

  • /password/: Filtra linhas que contêm a palavra password.
  • i [PRIVADO]: Insere [PRIVADO] antes dessas linhas.

2.5 Substituir valores monetários por [VALOR]

Comando:

1
sed 's/R\$\?[0-9]\+,\?[0-9]*/[VALOR]/g' texto_sed.txt

Explicação:

  • R\$\?[0-9]\+,\?[0-9]*: Captura valores monetários no formato R$1234,56 ou 1234,56.
  • [VALOR]: Substitui os valores encontrados pelo texto [VALOR].

2.6 Alterar a ordem das palavras separadas por vírgulas (Linha 6)

Comando:

1
sed '6s/\([^,]*\), \([^,]*\), \([^,]*\)/\3, \2, \1/' texto_sed.txt

Explicação:

  • 6: Aplica o comando apenas à Linha 6.
  • \([^,]*\): Captura palavras separadas por vírgulas.
  • \3, \2, \1: Reorganiza as capturas na ordem inversa.

2.7 Transformar logs de eventos (Linhas 39-41) em formato JSON

Comando:

1
sed -n '39,41s/\[\(.*\)\] \(.*\): \(.*\)/{\n  "timestamp": "\1",\n  "level": "\2",\n  "message": "\3"\n}/p' texto_sed.txt

Explicação:

  • 39,41: Aplica o comando às linhas 39 a 41.
  • \[\(.*\)\]: Captura o timestamp.
  • \(.*\):: Captura o nível do log (INFO, ERROR, etc.).
  • \(.*\): Captura a mensagem do log.
  • Formata como JSON com chaves timestamp, level e message.

2.8 Substituir coordenadas por texto padronizado [LAT/LONG]

Comando:

1
sed 's/Latitude: [+-]*[0-9.]\+, Longitude: [+-]*[0-9.]\+/[LAT\/LONG]/g' texto_sed.txt

Explicação:

  • Latitude: [+-]*[0-9.]\+, Longitude: [+-]*[0-9.]\+:
    • Captura coordenadas no formato Latitude: -23.55052, Longitude: -46.63330.
  • [LAT/LONG]: Substitui coordenadas capturadas pelo texto [LAT/LONG].

2.9 Excluir todas as linhas com tokens alfanuméricos

Comando:

1
sed '/[a-zA-Z0-9]\{8,\}/d' texto_sed.txt

Explicação:

  • [a-zA-Z0-9]\{8,\}: Seleciona linhas que contêm tokens com 8 ou mais caracteres alfanuméricos.
  • d: Deleta essas linhas.

2.10 Adicionar sufixo ` | VALOR FINAL` em todas as linhas com números decimais

Comando:

1
sed '/[0-9]\+\.[0-9]\+/s/$/ | VALOR FINAL/' texto_sed.txt

Explicação:

  • /[0-9]\+\.[0-9]\+/: Seleciona linhas que contêm números decimais.
  • s/$/ | VALOR FINAL/: Adiciona o texto | VALOR FINAL ao final da linha.

Resumo dos Comandos Intermediários

ExercícioComando PrincipalFunção
2.1s/.*\([0-9]\{4\}-[0-9]\{2\}...\)/\1/pExtrair datas no formato AAAA-MM-DD.
2.2s/[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]...\)Substituir e-mails por [EMAIL_OCULTADO].
2.342s/\([^,]*\), \([^,]*\),...Transformar listas delimitadas por vírgulas.
2.4/password/i [PRIVADO]Adicionar [PRIVADO] antes de linhas com senhas.
2.5s/R\$\?[0-9]\+,\?[0-9]*/[VALOR]/gSubstituir valores monetários por [VALOR].
2.66s/\([^,]*\), \([^,]*\),...Alterar a ordem de palavras separadas por vírgulas.
2.739,41s/\[\(.*\)\] \(.*\): \(.*\)/{...}Transformar logs em formato JSON.
2.8s/Latitude: [+-]*[0-9.]\+, Longitude...Substituir coordenadas por [LAT/LONG].
2.9/[a-zA-Z0-9]\{8,\}/dExcluir linhas com tokens alfanuméricos longos.
2.10/[0-9]\+\.[0-9]\+/s/$/ | VALOR FINAL/Adicionar sufixo em linhas com números decimais.

Desafios - Exercícios Intermediários

2.1 Reorganizar listas separadas por vírgulas

Pergunta:

  • Dado o texto “maçã, banana, laranja”, qual comando inverte a ordem para “laranja, banana, maçã”?

Resposta Esperada:

1
sed 's/\([^,]*\), \([^,]*\), \([^,]*\)/\3, \2, \1/' texto_sed.txt

2.2 Normalizar e-mails

Pergunta:

  • Como substituir qualquer e-mail por [EMAIL_OCULTADO]?

Resposta Esperada:

1
sed 's/[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,6\}/[EMAIL_OCULTADO]/g' texto_sed.txt

2.3 Adicionar texto condicionalmente

Pergunta:

  • Qual comando adiciona [SENHA] antes de linhas contendo “password”?

Resposta Esperada:

1
sed '/password/i [SENHA]' texto_sed.txt

Exercícios Avançados

3.1 Reorganizar datas no formato AAAA-MM-DD para DD/MM/AAAA em todo o arquivo

Comando:

1
sed 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\3\/\2\/\1/g' texto_sed.txt

Explicação:

  • \([0-9]\{4\}\): Captura quatro dígitos (ano).
  • \([0-9]\{2\}\): Captura dois dígitos (mês e dia).
  • \3\/\2\/\1: Reorganiza os grupos capturados para o formato DD/MM/AAAA.
  • g: Aplica a substituição em todas as ocorrências por linha.

3.2 Inserir uma linha com # LOG antes de cada evento de log (Linhas 39-41)

Comando:

1
sed '39,41s/^/# LOG: /' texto_sed.txt

Explicação:

  • 39,41: Aplica o comando às linhas 39 a 41.
  • s/^/# LOG: /: Insere # LOG: no início de cada linha.

3.3 Substituir tokens por suas versões truncadas (apenas os primeiros 5 caracteres)

Comando:

1
sed 's/\b[a-zA-Z0-9]\{6,\}\b/\U&/g;s/\([a-zA-Z0-9]\{5\}\)[a-zA-Z0-9]*/\1/g' texto_sed.txt

Explicação:

  1. Primeiro comando:
    • s/\b[a-zA-Z0-9]\{6,\}\b/\U&/g: Garante que tokens com 6 ou mais caracteres sejam selecionados.
  2. Segundo comando:
    • s/\([a-zA-Z0-9]\{5\}\)[a-zA-Z0-9]*/\1/g: Trunca os tokens para os primeiros 5 caracteres.

3.4 Alterar valores no formato chave=valor para chave: valor

Comando:

1
sed 's/^\([a-zA-Z_]\+\)=\(.*\)/\1: \2/' texto_sed.txt

Explicação:

  • ^\([a-zA-Z_]\+\)=\(.*\):
    • Captura a chave antes do = e o valor depois.
  • \1: \2: Substitui = por :.

3.5 Reverter a ordem das palavras em linhas que contenham “parágrafo”

Comando:

1
sed '/parágrafo/s/\([^ ]*\) \([^ ]*\)/\2 \1/g' texto_sed.txt

Explicação:

  • /parágrafo/: Filtra linhas que contêm a palavra parágrafo.
  • \([^ ]*\) \([^ ]*\): Captura duas palavras consecutivas.
  • \2 \1: Inverte a ordem das capturas.

3.6 Identificar e remover valores científicos (1.23e+10)

Comando:

1
sed 's/\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b//g' texto_sed.txt

Explicação:

  • \b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b:
    • Seleciona valores no formato científico (e.g., 1.23e+10).
  • g: Remove todas as ocorrências na linha.

3.7 Excluir todas as linhas com palavras repetidas consecutivas

Comando:

1
sed '/\b\([a-zA-Z]\+\) \1\b/d' texto_sed.txt

Explicação:

  • \b\([a-zA-Z]\+\) \1\b: Captura palavras consecutivas repetidas.
  • d: Deleta linhas que atendem ao padrão.

3.8 Adicionar índice crescente a todas as linhas do arquivo

Comando:

1
sed '=' texto_sed.txt | sed 'N;s/\n/: /'

Explicação:

  1. =:
    • Exibe os números das linhas antes de cada linha do arquivo.
  2. Pipeline:
    • Combina os números das linhas com o conteúdo usando N (une duas linhas consecutivas).
  3. s/\n/: /:
    • Substitui a quebra de linha entre o número e o conteúdo da linha por : .

3.9 Substituir URLs pelo domínio extraído

Comando:

1
sed 's|https\?://\([^/]*\).*|\1|g' texto_sed.txt

Explicação:

  • https\?://\([^/]*\):
    • Captura o domínio de URLs no formato http:// ou https://.
  • Substitui a URL inteira pelo domínio.

3.10 Criar uma lista JSON com dados de nomes e cidades (Linhas 44-46)

Comando:

1
sed -n '44,46s/\([^,]*\), \([^,]*\), \(.*\)/{\n  "name": "\1",\n  "age": \2,\n  "city": "\3"\n},/p' texto_sed.txt

Explicação:

  • 44,46: Aplica o comando às linhas 44 a 46.
  • \([^,]*\), \([^,]*\), \(.*\):
    • Captura o nome, idade e cidade.
  • Formata os dados em estilo JSON.

Resumo dos Comandos Avançados

ExercícioComando PrincipalFunção
3.1s/\([0-9]\{4\}\)-\([0-9]\{2\}...\)...Reorganizar datas no formato DD/MM/AAAA.
3.239,41s/^/# LOG: /Adicionar # LOG antes de eventos de log.
3.3s/\b[a-zA-Z0-9]\{6,\}...\Truncar tokens para os primeiros 5 caracteres.
3.4s/^\([a-zA-Z_]\+\)=\(.*\)/\1: \2/Alterar chave=valor para chave: valor.
3.5/parágrafo/s/\([^ ]*\) \([^ ]*\)...Reverter palavras em linhas com “parágrafo”.
3.6s/\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b//gRemover valores científicos.
3.7/\b\([a-zA-Z]\+\) \1\b/dExcluir linhas com palavras repetidas consecutivas.
3.8= | sed 'N;s/\n/: /'Adicionar índice crescente às linhas.
3.9s|https\?://\([^/]*\)...|\1|gSubstituir URLs pelo domínio.
3.1044,46s/\([^,]*\), \([^,]*\)...Criar lista JSON com nomes e cidades.

Desafios - Exercícios Avançados

3.1 Converter logs para JSON

Pergunta:

  • Dado um log [2024-11-28 12:00:00] INFO: Serviço iniciado., qual comando transforma isso em JSON?

Resposta Esperada:

1
sed 's/\[\(.*\)\] \(.*\): \(.*\)/{\n  "timestamp": "\1",\n  "level": "\2",\n  "message": "\3"\n}/' texto_sed.txt

3.2 Reverter palavras em linhas com padrões específicos

Pergunta:

  • Como inverter palavras apenas nas linhas que contêm “exemplo”?

Resposta Esperada:

1
sed '/exemplo/s/\([^ ]*\) \([^ ]*\)/\2 \1/' texto_sed.txt

Exercícios Especializados

4.1 Converter o arquivo para formato JSON básico

Comando:

1
sed -e '1i {' -e 's/^Linha \([0-9]*\): \(.*\)/  "linha_\1": "\2",/' -e '$s/,$/\n}/' texto_sed.txt

Explicação:

  1. 1i {:
    • Insere { na primeira linha (início do JSON).
  2. s/^Linha \([0-9]*\): \(.*\)/ "linha_\1": "\2",/:
    • Captura o número da linha e seu conteúdo, formatando como "linha_n": "conteúdo",.
  3. $s/,$/\n}/:
    • Remove a vírgula final na última linha e insere } para fechar o JSON.

4.2 Transformar o arquivo em formato YAML

Comando:

1
sed -e '1i linhas:' -e 's/^Linha \([0-9]*\): \(.*\)/  - linha: \1\n    texto: "\2"/' texto_sed.txt

Explicação:

  1. 1i linhas::
    • Insere linhas: no início do arquivo (cabeçalho do YAML).
  2. s/^Linha \([0-9]*\): \(.*\)/ - linha: \1\n texto: "\2"/:
    • Formata cada linha como um item YAML, incluindo o número e o texto correspondente.

4.3 Criar uma lista com os domínios de URLs presentes no arquivo

Comando:

1
sed -n 's|https\?://\([^/]*\).*|\1|p' texto_sed.txt | sort | uniq

Explicação:

  1. https\?://\([^/]*\):
    • Captura o domínio de URLs no formato http:// ou https://.
  2. Pipeline:
    • sort | uniq: Remove domínios duplicados, listando apenas valores únicos.

4.4 Substituir números flutuantes por [FLOAT]

Comando:

1
sed 's/\b[0-9]\+\.[0-9]\+\b/[FLOAT]/g' texto_sed.txt

Explicação:

  • \b[0-9]\+\.[0-9]\+\b: Seleciona números flutuantes.
  • [FLOAT]: Substitui os valores capturados pelo texto [FLOAT].

4.5 Identificar valores monetários e somar

Comando:

1
sed -n 's/.*\([0-9]\+,\?[0-9]*\).*/\1/p' texto_sed.txt | tr ',' '.' | awk '{sum+=$1} END {print sum}'

Explicação:

  1. sed -n 's/.*\([0-9]\+,\?[0-9]*\).*/\1/p':
    • Extrai valores monetários.
  2. tr ',' '.':
    • Converte vírgulas para pontos (para cálculos no formato numérico).
  3. awk:
    • Soma os valores extraídos.

4.6 Criar cabeçalhos com base em palavras-chave

Comando:

1
sed '/^Linha [0-9]*:/s/^/# SEÇÃO: /' texto_sed.txt

Explicação:

  • /^Linha [0-9]*:/: Seleciona linhas que começam com Linha n:.
  • s/^/# SEÇÃO: /: Adiciona # SEÇÃO: no início dessas linhas.

4.7 Formatar logs como JSON

Comando:

1
sed -n '/^\[.*\]/s/\[\(.*\)\] \(.*\): \(.*\)/{\n  "timestamp": "\1",\n  "level": "\2",\n  "message": "\3"\n}/p' texto_sed.txt

Explicação:

  1. /^\[.*\]/:
    • Filtra linhas que começam com colchetes (logs).
  2. Substituição:
    • Converte as linhas em objetos JSON com chaves timestamp, level e message.

4.8 Criar backup das linhas alteradas em um novo arquivo

Comando:

1
sed '/exemplo/s/exemplo/EXEMPLO/w alteradas.txt' texto_sed.txt

Explicação:

  • /exemplo/s/exemplo/EXEMPLO/: Substitui exemplo por EXEMPLO.
  • w alteradas.txt: Salva as linhas alteradas no arquivo alteradas.txt.

4.9 Excluir linhas contendo valores científicos (1.23e+10)

Comando:

1
sed '/\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b/d' texto_sed.txt

Explicação:

  • /\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b/: Seleciona linhas com valores científicos.
  • d: Deleta as linhas correspondentes.

4.10 Adicionar índice e reformatar como CSV

Comando:

1
sed '=' texto_sed.txt | sed 'N;s/\n/, /' > arquivo.csv

Explicação:

  1. =:
    • Exibe o número da linha antes de cada linha do arquivo.
  2. N;s/\n/, /:
    • Combina o número da linha com seu conteúdo, separando-os por ,.
  3. > arquivo.csv:
    • Salva o resultado em um arquivo CSV.

Resumo dos Comandos Especializados

ExercícioComando PrincipalFunção
4.1s/^Linha \([0-9]*\): \(.*\)...Converter para JSON básico.
4.2s/^Linha \([0-9]*\): \(.*\)...Converter para YAML básico.
4.3s|https\?://\([^/]*\)...|\1|pListar domínios de URLs.
4.4s/\b[0-9]\+\.[0-9]\+\b/[FLOAT]/gSubstituir números flutuantes por [FLOAT].
4.5sed + tr + awkSomar valores monetários extraídos.
4.6/^Linha [0-9]*:/s/^/# SEÇÃO: /Criar cabeçalhos baseados em palavras-chave.
4.7/^\[.*\]/s/\[\(.*\)\]...Formatar logs como JSON.
4.8/exemplo/s/exemplo/EXEMPLO/w alteradas.txtCriar backup das linhas alteradas.
4.9/\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b/dExcluir linhas com valores científicos.
4.10= | sed 'N;s/\n/, /' > arquivo.csvAdicionar índice e salvar como CSV.

Desafios - Exercícios Especializados

4.1 Geração dinâmica de scripts

Pergunta:

  • Dado o IP 192.168.0.1, qual comando gera um script que pinga esse endereço?

Resposta Esperada:

1
sed -n 's/.*IP \([0-9.]*\).*/ping -c 1 \1/p' texto_sed.txt > ping_script.sh

4.2 Processar tabelas para Markdown

Pergunta:

  • Dada a tabela “Nome, Idade, Cidade”, como convertê-la para Markdown?

Resposta Esperada:

1
sed 's/,/ | /g;s/^/| /;s/$/ |/' texto_sed.txt

4.3 Extração de domínios únicos

Pergunta:

  • Como listar os domínios únicos presentes no arquivo?

Resposta Esperada:

1
sed -n 's|https\?://\([^/]*\).*|\1|p' texto_sed.txt | sort | uniq

Erros Comuns no Uso do sed

Aqui estão os erros mais frequentes ao usar o sed e como resolvê-los:

1. Esquecer de Escapar Caracteres Especiais

Cenário:

Ao tentar substituir uma barra / em uma URL, o comando falha devido ao uso incorreto do delimitador padrão.

Exemplo Errado:

1
sed 's/http://https://g' texto_sed.txt

Problema:

O sed interpreta as barras (/) como delimitadores do comando s.

Solução:

Escape as barras ou use um delimitador alternativo, como |:

1
sed 's|http://|https://|g' texto_sed.txt

2. Aplicar Substituições Globalmente Quando Não Necessário

Cenário:

Você deseja substituir apenas a primeira ocorrência de “teste” em cada linha, mas usa o modificador g.

Exemplo Errado:

1
sed 's/teste/TESTE/g' texto_sed.txt

Problema:

O modificador g substitui todas as ocorrências na linha, não apenas a primeira.

Solução:

Remova o modificador g para afetar apenas a primeira ocorrência:

1
sed 's/teste/TESTE/' texto_sed.txt

3. Confundir Delimitadores em Substituições

Cenário:

Ao usar diferentes delimitadores, você se esquece de que o primeiro caractere define o delimitador para o comando inteiro.

Exemplo Errado:

1
sed 's;http://https://;g' texto_sed.txt

Problema:

O ; usado após https:// não é reconhecido como delimitador de encerramento.

Solução:

Certifique-se de que todos os delimitadores estejam consistentes:

1
sed 's;http://;https://;g' texto_sed.txt

4. Falha ao Escapar Caracteres de Regex

Cenário:

Você quer substituir um ponto literal (.) por uma vírgula, mas não escapa o ponto.

Exemplo Errado:

1
sed 's/./,/g' texto_sed.txt

Problema:

O . corresponde a qualquer caractere, não ao ponto literal.

Solução:

Escape o ponto com uma barra invertida (\):

1
sed 's/\./,/g' texto_sed.txt

5. Confundir Regex e Strings Literais

Cenário:

Você quer substituir uma string contendo *, mas o * é interpretado como parte da expressão regular.

Exemplo Errado:

1
sed 's/*/TEXTO/g' texto_sed.txt

Problema:

O * é um operador regex que significa “zero ou mais do caractere anterior”.

Solução:

Escape o * ou use a opção -r para desativar o comportamento padrão de regex:

1
sed 's/\*/TEXTO/g' texto_sed.txt

6. Ignorar a Opção -i em Edições In-Place

Cenário:

Você espera modificar diretamente um arquivo, mas o sed imprime o resultado apenas na saída padrão.

Exemplo Errado:

1
sed 's/exemplo/EXEMPLO/' texto_sed.txt

Problema:

O arquivo original não é alterado, pois o comando não usa a opção -i (edição in-place).

Solução:

Adicione -i para editar o arquivo diretamente:

1
sed -i 's/exemplo/EXEMPLO/' texto_sed.txt

7. Aplicar Substituições em Todo o Arquivo Sem Filtrar

Cenário:

Você quer substituir “linha” apenas nas linhas que contêm “texto especial”, mas aplica o comando a todas as linhas.

Exemplo Errado:

1
sed 's/linha/LINHA/' texto_sed.txt

Problema:

O comando afeta todas as ocorrências de “linha”, não apenas as desejadas.

Solução:

Adicione um filtro para restringir as linhas afetadas:

1
sed '/texto especial/s/linha/LINHA/' texto_sed.txt

8. Trabalhar com Arquivos Grandes Sem Saber o Limite de Buffer

Cenário:

Você processa um arquivo muito grande, mas o sed falha ao tentar capturar múltiplas linhas com N.

Problema:

O sed tem um limite de buffer por linha, e arquivos muito grandes podem causar problemas.

Solução:

Use ferramentas como awk ou processe o arquivo em blocos:

1
sed -n '1,100p' texto_sed.txt | sed 's/exemplo/EXEMPLO/g'

9. Esquecer de Suprimir a Saída Padrão com -n

Cenário:

Você quer imprimir apenas linhas que contêm “ERROR”, mas todas as linhas aparecem na saída.

Exemplo Errado:

1
sed '/ERROR/p' texto_sed.txt

Problema:

O comando imprime todas as linhas, porque o p não suprime a saída padrão.

Solução:

Use -n para suprimir a saída padrão:

1
sed -n '/ERROR/p' texto_sed.txt

10. Substituições Sem Salvar no Arquivo Final

Cenário:

Você realiza substituições complexas, mas se esquece de redirecionar a saída para um novo arquivo.

Exemplo Errado:

1
sed 's/exemplo/EXEMPLO/' texto_sed.txt

Problema:

A saída modificada é apenas exibida no terminal.

Solução:

Redirecione a saída para um arquivo ou use -i:

1
sed 's/exemplo/EXEMPLO/' texto_sed.txt > texto_modificado.txt

Ou:

1
sed -i 's/exemplo/EXEMPLO/' texto_sed.txt

Resumo

ErroCausaSolução
Esquecer de escapar caracteresCaracteres como /, . ou * são tratados como regexUse \ para escapar ou delimitadores alternativos.
Aplicar substituições globalmenteUso desnecessário do modificador gRemova g para afetar apenas a primeira ocorrência.
Ignorar a opção -iO arquivo original não é modificadoUse -i para edição in-place.
Esquecer de suprimir a saídaUso do comando p sem -nAdicione -n para mostrar apenas as capturas.

Tabela de Referência Rápida do sed

Abaixo estão os principais elementos do sed, organizados por categorias para facilitar a consulta.


1. Operadores Básicos

ComandoDescrição
s/padrão/subst/Substitui o padrão pela substituição na linha.
pImprime a linha.
dDeleta a linha selecionada.
i textoInsere texto antes da linha atual.
a textoAdiciona texto depois da linha atual.
c textoSubstitui a linha atual por texto.

2. Modificadores do Comando s

ModificadorDescrição
/gSubstitui todas as ocorrências na linha.
/iIgnora maiúsculas e minúsculas na correspondência.
/nSubstitui apenas a n-ésima ocorrência na linha.

3. Seleção de Linhas

PadrãoDescrição
NSeleciona a linha de número N.
N,MSeleciona o intervalo de linhas de N até M.
/regex/Seleciona linhas que correspondem à regex.
!Aplica o comando a linhas que não correspondem ao padrão.

Exemplo:

1
2
3
sed '2,4d' arquivo.txt         # Remove as linhas 2 a 4
sed '/erro/d' arquivo.txt      # Remove linhas contendo "erro"
sed '/^[[:space:]]*$/d'        # Remove linhas vazias

4. Operadores de Espaço

OperadorDescrição
hCopia o conteúdo do espaço padrão (pattern space) para o espaço de retenção (hold space).
gSubstitui o conteúdo do espaço padrão pelo espaço de retenção.
xTroca os conteúdos do espaço padrão e do espaço de retenção.
HAdiciona o conteúdo do espaço padrão ao espaço de retenção.

Exemplo:

1
sed '/START/,/END/{h;/END/x}' arquivo.txt  # Alterna as seções START/END

5. Classes de Caracteres

ClasseDescriçãoExemplo
[[:digit:]]Números (0-9)./[[:digit:]]+/ (encontra números).
[[:alpha:]]Letras (a-z, A-Z)./[[:alpha:]]+/ (encontra palavras).
[[:space:]]Espaços, tabulações, etc./[[:space:]]+/ (encontra espaços).
[[:upper:]]Letras maiúsculas./[[:upper:]]+/ (encontra ABC).
[[:lower:]]Letras minúsculas./[[:lower:]]+/ (encontra abc).

6. Âncoras

ÂncoraDescrição
^Representa o início da linha.
$Representa o final da linha.
\bRepresenta a borda de uma palavra.

Exemplo:

1
2
sed '/^inicio/p' arquivo.txt   # Imprime linhas que começam com "inicio"
sed '/fim$/p' arquivo.txt      # Imprime linhas que terminam com "fim"

7. Escapando Caracteres Especiais

CaractereDescriçãoComo Escapar
/Delimitador padrão do s.\/ ou outro delimitador.
.Qualquer caractere.\. (para ponto literal).
*Zero ou mais do caractere anterior.\* (para asterisco literal).
[ e ]Conjuntos de caracteres.\[ e \].

8. Opções Comuns

OpçãoDescrição
-nSuprime a saída padrão; imprime apenas as linhas especificadas.
-iFaz edições in-place (diretamente no arquivo).
-ePermite adicionar múltiplos comandos em uma única execução.
-f arquivoLê comandos de um arquivo externo.

9. Exemplos Rápidos

ComandoFunção
sed 's/foo/bar/'Substitui foo por bar na primeira ocorrência de cada linha.
sed -i 's/foo/bar/g'Substitui todas as ocorrências de foo por bar no arquivo.
sed -n '/foo/p'Imprime apenas linhas contendo foo.
sed '/foo/d'Deleta linhas contendo foo.
sed '5q'Para a leitura após a quinta linha.
sed 's/[0-9]/#/g'Substitui todos os dígitos por #.
sed '/START/,/END/d'Remove todas as linhas entre “START” e “END”.

Integração do sed com Outras Ferramentas

Aqui estão exemplos de como o sed pode ser usado em conjunto com outras ferramentas para automação e manipulação avançada de dados.

1. Combinação com grep

1.1 Filtrar Linhas e Substituir um Padrão

Use grep para localizar linhas específicas e sed para realizar substituições nelas.

Exemplo:

1
grep 'erro' log.txt | sed 's/erro/ERRO_CRÍTICO/g'

Descrição:

  • grep 'erro' log.txt: Seleciona apenas linhas contendo erro.
  • sed 's/erro/ERRO_CRÍTICO/g': Substitui erro por ERRO_CRÍTICO nessas linhas.

1.2 Substituir Apenas em Linhas Encontradas pelo grep

Use xargs para aplicar substituições apenas em arquivos que contenham uma palavra específica.

Exemplo:

1
grep -l 'palavra' *.txt | xargs -I {} sed -i 's/palavra/substituta/g' {}

Descrição:

  • grep -l 'palavra' *.txt: Lista arquivos que contêm palavra.
  • xargs: Executa sed em cada arquivo encontrado.

2. Integração com awk

2.1 Calcular Valores Após Substituições

Use sed para formatar os dados e awk para cálculos.

Exemplo:

1
sed 's/,/./g' valores.txt | awk '{soma+=$1} END {print soma}'

Descrição:

  • sed 's/,/./g' valores.txt: Substitui vírgulas por pontos nos valores numéricos.
  • awk: Soma os valores processados.

2.2 Reorganizar Dados Complexos

Combine sed e awk para processar tabelas e reformatá-las.

Exemplo:

1
sed 's/,/;/g' tabela.txt | awk -F';' '{print $2, $1, $3}'

Descrição:

  • sed 's/,/;/g' tabela.txt: Substitui vírgulas por ;.
  • awk -F';': Reorganiza as colunas.

3. Integração com find

3.1 Renomear Arquivos em Massa

Use find para localizar arquivos e sed para alterar seus nomes.

Exemplo:

1
find . -name '*.txt' | sed 's/.txt$/.md/' | xargs -I {} mv {} {}

Descrição:

  • find . -name '*.txt': Lista arquivos .txt.
  • sed 's/.txt$/.md/': Altera a extensão para .md.
  • xargs mv: Renomeia os arquivos.

3.2 Editar Arquivos Encontrados

Aplique mudanças diretamente nos arquivos localizados com find.

Exemplo:

1
find . -type f -name '*.conf' -exec sed -i 's/localhost/127.0.0.1/g' {} +

Descrição:

  • find . -type f -name '*.conf': Localiza arquivos .conf.
  • sed -i: Substitui localhost por 127.0.0.1 nesses arquivos.

4. Processamento com xargs

4.1 Processar Arquivos em Lote

Use xargs para passar uma lista de arquivos para o sed.

Exemplo:

1
ls *.log | xargs sed -i 's/erro/warning/g'

Descrição:

  • ls *.log: Lista arquivos .log.
  • xargs sed -i: Substitui erro por warning em todos os arquivos listados.

5. Integração com Scripts Shell

5.1 Substituir Baseado em Entradas Dinâmicas

Use variáveis Shell para tornar os comandos dinâmicos.

Exemplo:

1
2
novo_valor="nova_configuracao"
sed -i "s/configuracao_antiga/$novo_valor/g" arquivo.txt

Descrição:

  • O valor de novo_valor é inserido dinamicamente no comando sed.

5.2 Gerar Comandos Baseados em um Arquivo

Extraia dados de um arquivo para criar comandos.

Exemplo:

1
sed 's/.*/mv & &.backup/' lista_arquivos.txt | bash

Descrição:

  • sed: Cria comandos mv para renomear arquivos, adicionando .backup.
  • | bash: Executa os comandos gerados.

6. Casos de Uso Reais

6.1 Analisar Logs e Gerar Relatórios

Use o sed para filtrar eventos críticos e combiná-lo com outras ferramentas para criar relatórios.

Exemplo:

1
grep 'ERROR' log.txt | sed 's/^/[CRÍTICO] /' > erros_criticos.txt

Descrição:

  • grep: Filtra apenas linhas com ERROR.
  • sed: Adiciona o prefixo [CRÍTICO] a essas linhas.

6.2 Transformar Dados para Formatos Personalizados

Combine sed e outras ferramentas para gerar formatos como JSON ou YAML.

Exemplo:

1
sed 's/^\(.*\), \(.*\), \(.*\)$/- name: \1\n  age: \2\n  city: \3/' tabela.txt

Descrição:

  • Converte uma tabela CSV para YAML.

Resumo de Integrações

FerramentaUso Combinado
grepFiltrar linhas antes de processar com o sed.
awkRealizar cálculos ou reorganizar dados após substituições.
findLocalizar arquivos e aplicar transformações neles.
xargsPassar resultados de um comando para o sed em massa.
ShellCriar scripts dinâmicos que integram substituições com outros comandos do sistema.

Casos de Uso em Automação

1. Geração Automática de Backups

Descrição

Crie backups para arquivos de texto, adicionando a extensão .bak e, opcionalmente, um carimbo de data.

Script

1
2
3
4
5
#!/bin/bash
for file in *.txt; do
  cp "$file" "${file%.txt}_$(date +%Y%m%d).bak"
  sed -i.bak 's/localhost/127.0.0.1/g' "$file"
done

Explicação

  • cp "$file" "${file%.txt}_$(date +%Y%m%d).bak":
    • Copia o arquivo, adicionando a data ao nome do backup.
  • sed -i.bak 's/localhost/127.0.0.1/g' "$file":
    • Substitui localhost por 127.0.0.1 no arquivo original, criando um backup automático com .bak.

2. Normalização de Dados em Arquivos Grandes

Descrição

Limpe e normalize grandes arquivos de texto, removendo linhas irrelevantes, múltiplos espaços e palavras-chave sensíveis.

Script

1
2
3
4
#!/bin/bash
sed -i '/irrelevante/d' data.txt       # Remove linhas com "irrelevante"
sed -i 's/[[:space:]]\+/ /g' data.txt # Substitui múltiplos espaços por um único
sed -i 's/password/[REDACTED]/g' data.txt # Substitui "password" por "[REDACTED]"

Explicação

  • /irrelevante/d: Remove linhas irrelevantes.
  • s/[[:space:]]\+/ /g: Normaliza múltiplos espaços consecutivos.
  • s/password/[REDACTED]/g: Oculta palavras sensíveis.

3. Geração de Relatórios CSV

Descrição

Extraia dados de um arquivo de texto e formate-os em um relatório CSV.

Script

1
2
#!/bin/bash
sed -n '/^Linha [0-9]*:/p' texto_sed.txt | sed 's/^Linha \([0-9]*\): \(.*\)/\1, "\2"/' > relatorio.csv

Explicação

  • Primeiro sed: Filtra apenas linhas numeradas (/^Linha [0-9]*:/).
  • Segundo sed: Formata cada linha como número, "texto".
  • Redirecionamento: Salva o resultado em relatorio.csv.

4. Limpeza de Logs e Exportação de Erros

Descrição

Filtre erros críticos de um arquivo de log e gere um relatório com timestamps.

Script

1
2
#!/bin/bash
grep 'ERROR' logs.txt | sed 's/\[ERROR\]/[CRITICAL]/g' > erros_criticos.txt

Explicação

  • grep 'ERROR': Seleciona apenas linhas contendo ERROR.
  • sed 's/\[ERROR\]/[CRITICAL]/g': Substitui a tag [ERROR] por [CRITICAL].
  • Redirecionamento: Salva o resultado em erros_criticos.txt.

5. Reformatar Logs em JSON

Descrição

Converta logs com timestamps e mensagens em formato JSON.

Script

1
2
#!/bin/bash
sed -n '/^\[.*\]/s/\[\(.*\)\] \(.*\): \(.*\)/{\n  "timestamp": "\1",\n  "level": "\2",\n  "message": "\3"\n}/p' logs.txt > logs.json

Explicação

  • /^\[.*\]/: Seleciona linhas que começam com [.
  • Substituição: Formata cada linha como JSON com timestamp, level e message.
  • Redirecionamento: Salva o resultado em logs.json.

6. Renomear Arquivos em Massa

Descrição

Renomeie arquivos substituindo espaços por underscores.

Script

1
2
3
4
#!/bin/bash
for file in *.txt; do
  mv "$file" "$(echo "$file" | sed 's/ /_/g')"
done

Explicação

  • for file in *.txt: Itera sobre todos os arquivos .txt.
  • sed 's/ /_/g': Substitui espaços por underscores no nome do arquivo.

7. Extração de Dados Sensíveis

Descrição

Extraia apenas e-mails de um arquivo para análise.

Script

1
2
#!/bin/bash
sed -n 's/.*\([a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,6\}\).*/\1/p' data.txt > emails_extraidos.txt

Explicação

  • Regex: Captura e-mails no formato padrão.
  • Redirecionamento: Salva os e-mails extraídos em emails_extraidos.txt.

8. Processar Tabelas para Markdown

Descrição

Converta uma tabela CSV para o formato Markdown.

Script

1
2
#!/bin/bash
sed 's/,/ | /g;s/^/| /;s/$/ |/' tabela.csv > tabela.md

Explicação

  • s/,/ | /g: Substitui vírgulas por `` (delimitador Markdown).
  • s/^/| /;s/$/ |: Adiciona barras verticais no início e no final de cada linha.
  • Redirecionamento: Salva o resultado em tabela.md.

9. Geração de Inventários para Ansible

Descrição

Formate uma lista de servidores e IPs como inventário do Ansible.

Script

1
2
#!/bin/bash
sed 's/\(.*\) ansible_host=\(.*\)/- name: \1\n  ip: \2/' hosts.txt > inventory.yml

Explicação

  • Regex: Captura o nome do servidor e o IP.
  • Substituição: Formata como YAML.

10. Validação de Arquivos Configuracionais

Descrição

Encontre linhas inválidas em arquivos de configuração (key=value).

Script

1
2
#!/bin/bash
sed -n '/^[a-zA-Z_]\+=.*$/!p' config.conf > erros_config.txt

Explicação

  • ^[a-zA-Z_]\+=.*$: Seleciona linhas válidas.
  • !p: Imprime linhas que não correspondem ao padrão.

Resumo

Caso de UsoScript/Comando Principal
Geração de Backupscp "$file" "${file%.txt}_$(date +%Y%m%d).bak"
Limpeza de Dadossed -i 's/[[:space:]]\+/ /g'
Relatórios CSVsed 's/^Linha \([0-9]*\): \(.*\)/\1, "\2"/'
Exportação de Logs Críticosgrep 'ERROR' | sed 's/\[ERROR\]/[CRITICAL]/g'
Logs para JSONsed 's/\[\(.*\)\] \(.*\): \(.*\)/.../'
Renomear Arquivosmv "$file" "$(echo "$file" | sed 's/ /_/g')"
Extração de E-mailssed -n 's/.../\1/p'
Markdown para Tabelassed 's/,/ | /g;s/^/| /;s/$/ |/'
Inventários para Ansiblesed 's/.../- name: \1\n ip: \2/'
Validação de Configuraçãosed -n '/^[a-zA-Z_]\+=.*$/!p'

Expressões Regulares (Regex) no sed

Expressões Regulares, ou Regex, são sequências de caracteres que definem um padrão de busca. No sed, elas são a base para identificar e manipular texto de forma poderosa e flexível. Compreender os metacaracteres de regex é crucial para dominar o sed.

Metacaracteres Essenciais:

Caractere(s)DescriçãoExemplo no sedExplicação
.Corresponde a qualquer caractere (exceto nova linha).s/./X/gSubstitui cada caractere por X.
*Corresponde a zero ou mais ocorrências do caractere ou grupo anterior.s/a*b/X/Substitui b, ab, aab, etc., por X.
+Corresponde a uma ou mais ocorrências do caractere ou grupo anterior.s/a\+b/X/Substitui ab, aab, etc., por X (não b).
?Corresponde a zero ou uma ocorrência do caractere ou grupo anterior.s/a\?b/X/Substitui b ou ab por X.
^Corresponde ao início da linha.s/^Texto/NOVO_Texto/Substitui Texto se estiver no início da linha.
$Corresponde ao final da linha.s/Texto$/NOVO_Texto/Substitui Texto se estiver no final da linha.
\bCorresponde a uma borda de palavra (início ou fim de uma palavra).s/\bpalavra\b/NOVA_PALAVRA/Substitui apenas a palavra palavra, não palavras.
\( \)Agrupa expressões e captura o texto correspondente para retroreferência.s/\(um\)\(dois\)/\2\1/Troca a ordem de umdois para doisum.
\{n\}Corresponde a exatamente n ocorrências.s/a\{3\}/X/Substitui aaa por X.
\{n,\}Corresponde a n ou mais ocorrências.s/a\{2,\}/X/Substitui aa, aaa, etc., por X.
\{n,m\}Corresponde a entre n e m ocorrências (inclusive).s/a\{1,3\}/X/Substitui a, aa, aaa por X.
[ ]Corresponde a qualquer caractere dentro do conjunto.s/[aeiou]/X/gSubstitui todas as vogais por X.
[^ ]Corresponde a qualquer caractere que NÃO esteja dentro do conjunto.s/[^0-9]/X/gSubstitui tudo que não for número por X.
|Operador OU (requer -E ou \| para sed básico).sed -E 's/cat|dog/animal/g'Substitui cat ou dog por animal.

Classes de Caracteres (POSIX):

Para simplificar a escrita de regex, o sed suporta classes de caracteres POSIX, que representam conjuntos comuns de caracteres:

ClasseDescriçãoEquivalente
[:alnum:]Caracteres alfanuméricos (letras e números)[a-zA-Z0-9]
[:alpha:]Caracteres alfabéticos (letras)[a-zA-Z]
[:blank:]Espaço e tabulação[ \t]
[:digit:]Dígitos (0-9)[0-9]
[:lower:]Letras minúsculas[a-z]
[:print:]Caracteres imprimíveis 
[:punct:]Caracteres de pontuação 
[:space:]Caracteres de espaço em branco[ \t\n\r\f\v]
[:upper:]Letras maiúsculas[A-Z]
[:xdigit:]Dígitos hexadecimais[0-9a-fA-F]

Exemplo de Uso:

Para remover múltiplos espaços no início ou no final das linhas, você pode usar [[:space:]]:

1
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' texto_sed.txt

Esta seção fornecerá uma base sólida para entender as expressões regulares complexas usadas nos exercícios e permitirá que os leitores criem seus próprios padrões com confiança.


Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.
Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.
Linha 21: 
Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro EXEMPLO com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um EXEMPLO de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@EXEMPLO.com.
Linha 32: O domínio www.EXEMPLO.com está ativo.
Linha 33: Documentação disponível em https://docs.EXEMPLO.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro EXEMPLO de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
Nova linha adicionada
Linha 28: O servidor principal usa o IP 192.168.1.10.
Nova linha adicionada
Linha 29: Um endereço de loopback é 127.0.0.1.
Nova linha adicionada
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria| João| Carla| Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
LINHA 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.
Linha 21: 
Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em http://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed. [EDITADO]
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas. [EDITADO]
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding. [EDITADO]
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação. [EDITADO]
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares. [EDITADO]
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 28/11/2024.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.
Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.
Linha 21: 
Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 15/10/2023 e 01/01/2024.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [28/11/2024 12:00:00] INFO: Serviço iniciado.
Linha 40: [28/11/2024 12:30:00] ERROR: Falha na autenticação.
Linha 41: [28/11/2024 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 28/11/2024T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.2 Extrair e formatar informações de um arquivo CSV (Linhas 44-46)

Comando:

1
sed -n '44,46s/\([^,]*\), \([^,]*\), \([^,]*\)/Nome: \1 | Idade: \2 | Cidade: \3/p' texto_sed.txt

Explicação:

  • 44,46: Aplica o comando às linhas 44 a 46.
  • \([^,]*\): Captura cada campo do CSV.
  • Nome: \1 | Idade: \2 | Cidade: \3: Formata os campos capturados.
  • -n e p: Imprime apenas as linhas formatadas.

Saída Esperada:

1
2
3
Nome: Nome | Idade: Idade | Cidade: Cidade
Nome: Alice | Idade: 30 | Cidade: São Paulo
Nome: Bob | Idade: 25 | Cidade: Rio de Janeiro

3.3 Remover comentários de um arquivo de configuração (linhas iniciadas com # ou ;)

Comando:

1
sed '/^[#;]/d' texto_sed.txt

Explicação:

  • ^[#;]: Seleciona linhas que começam com # ou ;.
  • d: Deleta essas linhas.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 28/11/2024.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.
Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.
Linha 21: 
Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 15/10/2023 e 01/01/2024.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [28/11/2024 12:00:00] INFO: Serviço iniciado.
Linha 40: [28/11/2024 12:30:00] ERROR: Falha na autenticação.
Linha 41: [28/11/2024 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 28/11/2024T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.4 Substituir valores em notação científica por [VALOR_CIENTIFICO]

Comando:

1
sed 's/[+-]\?[0-9]\+\.[0-9]\+[Ee][+-]\?[0-9]\+/[VALOR_CIENTIFICO]/g' texto_sed.txt

Explicação:

  • [+-]\?[0-9]\+\.[0-9]\+[Ee][+-]\?[0-9]\+: Captura números em notação científica (ex: 1.23e+10, -4.56e-8).
  • [VALOR_CIENTIFICO]: Substitui os valores encontrados pelo texto [VALOR_CIENTIFICO].

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: [VALOR_CIENTIFICO], [VALOR_CIENTIFICO].
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.5 Inserir uma linha antes de cada parágrafo (linhas que começam com “Parágrafo”)

Comando:

1
2
3
sed 
'/^Parágrafo/i\--- NOVO PARÁGRAFO ---
' texto_sed.txt

Explicação:

  • /^Parágrafo/: Seleciona linhas que começam com “Parágrafo”.
  • i\--- NOVO PARÁGRAFO --- : Insere a linha “— NOVO PARÁGRAFO —” antes das linhas selecionadas.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
--- NOVO PARÁGRAFO ---
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
--- NOVO PARÁGRAFO ---
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.6 Substituir o valor da porta em um arquivo de configuração (Linha 58)

Comando:

1
sed '58s/port=[0-9]\+/port=80/' texto_sed.txt

Explicação:

  • 58: Aplica o comando apenas à Linha 58.
  • port=[0-9]\+: Seleciona a string “port=” seguida por um ou mais dígitos.
  • port=80: Substitui o valor da porta por “80”.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=80.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.7 Extrair códigos alfanuméricos (Linha 59)

Comando:

1
sed -n '59s/.*Código: \([a-zA-Z0-9]\+\).*/\1/p' texto_sed.txt

Explicação:

  • 59: Aplica o comando apenas à Linha 59.
  • .*Código: \([a-zA-Z0-9]\+\).*: Captura a sequência alfanumérica após “Código: “.
  • -n e p: Imprime apenas a captura.

Saída Esperada:

1
ABC123XYZ

3.8 Substituir o formato de telefone (Linha 35) para (XX) XXXX-XXXX

Comando:

1
sed '35s/(\([0-9]\{2\}\)) \([0-9]\{5\}\)-\([0-9]\{4\}\)/(\1) \2-\3/' texto_sed.txt

Explicação:

  • 35: Aplica o comando apenas à Linha 35.
  • (\([0-9]\{2\}\)) \([0-9]\{5\}\)-\([0-9]\{4\}\): Captura os grupos de dígitos do telefone.
  • (\1) \2-\3: Reorganiza os grupos para o novo formato.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

3.9 Inserir um cabeçalho e rodapé em um arquivo

Comando:

1
sed '1i\--- INÍCIO DO ARQUIVO ---\n$a\--- FIM DO ARQUIVO ---' texto_sed.txt

Explicação:

  • 1i\--- INÍCIO DO ARQUIVO ---\n: Insere “— INÍCIO DO ARQUIVO —” na primeira linha.
  • $a\--- FIM DO ARQUIVO ---: Adiciona “— FIM DO ARQUIVO —” ao final do arquivo.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
--- INÍCIO DO ARQUIVO ---
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
Linha 55: username=admin
Linha 56: password=senha123
Linha 57: host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.
--- FIM DO ARQUIVO ---

3.10 Substituir o nome de usuário e senha em um arquivo de configuração (Linhas 55-56)

Comando:

1
sed -i '55s/username=.*/username=novo_usuario/; 56s/password=.*/password=nova_senha/' texto_sed.txt

Explicação:

  • -i: Edita o arquivo no local (in-place).
  • 55s/username=.*/username=novo_usuario/: Na linha 55, substitui o nome de usuário.
  • 56s/password=.*/password=nova_senha/: Na linha 56, substitui a senha.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
username=novo_usuario
password=nova_senha
host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Saída Esperada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Linha 1: Este é um arquivo para práticas com o sed.
Linha 2: Ele contém vários exemplos de texto.
Linha 3: Algumas linhas possuem números: 12345.
Linha 4: Outras linhas possuem palavras repetidas: teste teste teste.
Linha 5: Existem palavras como exemplo1 e exemplo2 que seguem um padrão.
Linha 6: Aqui há palavras separadas por vírgulas, como: maçã, banana, laranja.
Linha 7: Esta linha está marcada com o texto especial.
Linha 8: Outro padrão é data no formato AAAA-MM-DD, como 2024-11-28.
Linha 9: Às vezes há múltiplos espaços  entre palavras.
Linha 10: Linhas podem conter erros de digitação: exmplo, prátcas.
Linha 11: Esta linha é irrelevante e pode ser removida.
Linha 12: Números flutuam aqui: 1.23, 45.67, 890.12.
Linha 13: O texto especial aparece novamente aqui.
  Linha 14: Múltiplos espaços no início da linha.

Linha 15: SED, Sed, sed – mistura de maiúsculas e minúsculas.
Linha 16: Esta linha usa delimitadores diferentes: Texto1;Texto2;Texto3.
Linha 17: Uma linha com espaços extras no final.         
Linha 18: Uma linha      com    múltiplos espaços no meio.
Linha 19: PALAVRAS EM CAIXA ALTA PARA TESTES DE MAIÚSCULAS.
Linha 20: Uma linha vazia está logo abaixo.

Linha 21: 

Linha 22: Exemplo de linha com um | delimitador de texto.
Linha 23: Outro exemplo com datas: 2023-10-15 e 2024-01-01.
Linha 24: Palavras misturadas: exmplos, corrije, seding.
Linha 25: Um exemplo de linha com números separados: 12,34,56,78.
Linha 26: Esta linha é irrelevante e deve ser excluída.
Linha 27: Final do arquivo atualizado com novas sugestões.
Linha 28: O servidor principal usa o IP 192.168.1.10.
Linha 29: Um endereço de loopback é 127.0.0.1.
Linha 30: Este é um endereço IPv6: fe80::1ff:fe23:4567:890a.
Linha 31: Contato: usuario@exemplo.com.
Linha 32: O domínio www.exemplo.com está ativo.
Linha 33: Documentação disponível em https://docs.exemplo.com/docs.
Linha 34: Site antigo: http://www.antigo.com.
Linha 35: Telefone: (11) 98765-4321.
Linha 36: Contato internacional: +1-800-555-0199.
Linha 37: Endereço: Rua Exemplo, 123 - CEP: 12345-678.
Linha 38: Código postal dos EUA: 90210.
Linha 39: [2024-11-28 12:00:00] INFO: Serviço iniciado.
Linha 40: [2024-11-28 12:30:00] ERROR: Falha na autenticação.
Linha 41: [2024-11-28 13:00:00] WARN: Espaço em disco baixo.
Linha 42: Alice, Bob, Charlie, Dave.
Linha 43: Grupo: Maria; João; Carla; Lucas.
Linha 44: Nome, Idade, Cidade
Linha 45: Alice, 30, São Paulo
Linha 46: Bob, 25, Rio de Janeiro
Linha 47: Formato americano: 11/28/2024.
Linha 48: Formato ISO 8601: 2024-11-28T14:30:00Z.
Linha 49: Formato brasileiro: 28/11/2024 14:30.
Linha 50: Valores monetários: R$1234,56; $567.89; €42.10.
Linha 51: Coordenadas: Latitude: -23.55052, Longitude: -46.63330.
Linha 52: Valores em notação científica: 1.23e+10, -4.56e-8.
Linha 53: Parágrafo 1: Este é um texto longo para práticas com o sed. Ele inclui diversas frases para análise e modificação.
Linha 54: Parágrafo 2: Outro exemplo de texto que pode ser manipulado. Teste o sed com expressões regulares.
username=novo_usuario
password=nova_senha
host=localhost
Linha 58: port=8080.
Linha 59: Código: ABC123XYZ.
Linha 60: Token: 9f8d7e6c5b4a3d2c1f0.

Ferramentas Interativas

Para aprimorar ainda mais sua experiência com sed e expressões regulares, considere utilizar ferramentas interativas online. Elas permitem testar seus comandos e visualizar os resultados em tempo real, facilitando o aprendizado e a depuração. Algumas opções populares incluem:

  • Regex101: Uma ferramenta robusta para testar e depurar expressões regulares, com explicações detalhadas sobre cada parte da regex.
  • RegExr: Outra excelente ferramenta interativa para aprender, construir e testar expressões regulares.

Essas plataformas são ideais para experimentar diferentes padrões e comandos sed sem modificar arquivos reais, proporcionando um ambiente seguro para a prática.

Considerações de Performance

Ao trabalhar com sed em arquivos muito grandes ou em operações complexas, a performance pode se tornar um fator crítico. Aqui estão algumas dicas para otimizar o uso do sed:

  • Evite Múltiplas Passagens: Sempre que possível, combine várias operações sed em um único comando usando o ; ou o -e para evitar que o sed leia o arquivo várias vezes.
  • Use Endereçamento Específico: Se você sabe que uma operação se aplica apenas a um intervalo de linhas ou a linhas que correspondem a um padrão específico, use o endereçamento para limitar o escopo da operação. Isso evita que o sed processe linhas desnecessariamente.
  • Modo In-Place (-i): Para edições diretas no arquivo, o uso do -i (edição in-place) é geralmente mais eficiente do que redirecionar a saída para um novo arquivo e depois renomeá-lo. No entanto, tenha cuidado ao usar -i sem um backup, pois as alterações são permanentes.
  • Expressões Regulares Eficientes: Regex mal otimizadas podem consumir muitos recursos. Evite grupos de captura desnecessários e quantificadores gananciosos (.*) quando um quantificador não-ganancioso (.*?) ou uma regex mais específica for suficiente.
  • Teste em Subconjuntos: Para scripts complexos, teste o sed em subconjuntos menores do seu arquivo de dados antes de aplicá-lo ao arquivo completo. Isso ajuda a identificar gargalos de performance e a depurar o comando de forma mais eficiente.

Compreender essas considerações pode ajudar a escrever scripts sed mais rápidos e eficientes, especialmente em ambientes de produção com grandes volumes de dados.

Compatibilidade

O sed é uma ferramenta padrão do Unix e está disponível na maioria dos sistemas operacionais baseados em Unix, como Linux, macOS e BSD. No entanto, existem algumas diferenças sutis entre as implementações do sed, principalmente entre o GNU sed (o mais comum no Linux) e o BSD sed (encontrado no macOS e em alguns sistemas BSD).

Principais Diferenças:

  • Edição In-Place (-i):
    • GNU sed: Permite o uso de -i sem um argumento para editar o arquivo no local sem criar um backup (ex: sed -i 's/old/new/' file.txt).
    • BSD sed: Requer um argumento para -i para especificar a extensão do arquivo de backup (ex: sed -i '.bak' 's/old/new/' file.txt). Se você não quiser um backup, deve usar uma string vazia (ex: sed -i '' 's/old/new/' file.txt).
  • Expressões Regulares Estendidas (-r ou -E):
    • GNU sed: Usa -r para habilitar expressões regulares estendidas (ERE), que simplificam a sintaxe (ex: sed -r 's/(a|b)+/X/g').
    • BSD sed: Usa -E para o mesmo propósito (ex: sed -E 's/(a|b)+/X/g').
  • Quebras de Linha em Comandos i e a:
    • A forma como as quebras de linha são tratadas em comandos de inserção (i) e anexação (a) pode variar. No GNU sed, você pode usar \n diretamente. Em algumas versões do BSD sed, pode ser necessário usar uma quebra de linha real no script ou uma sintaxe diferente.

Recomendação:

Para garantir a máxima compatibilidade em diferentes sistemas, é uma boa prática:

  • Evitar o uso de -i sem argumento de backup se você pretende que seus scripts funcionem tanto no GNU sed quanto no BSD sed. Sempre use sed -i '.bak' ... ou sed -i '' ....
  • Usar expressões regulares básicas (BRE) sempre que possível, pois elas são mais universalmente suportadas. Se precisar de ERE, esteja ciente da diferença entre -r e -E.
  • Testar seus scripts em diferentes ambientes se a compatibilidade for uma preocupação.

Compreender essas nuances ajuda a escrever scripts sed mais portáveis e robustos.

Reforçando o Uso de Aspas

Um aspecto crucial ao usar o sed no terminal é o correto emprego das aspas. As aspas simples (' ') e as aspas duplas (" ") têm comportamentos distintos que podem afetar a interpretação dos seus comandos pelo shell.

  • Aspas Simples (' '):
    • Recomendado para a maioria dos comandos sed: As aspas simples protegem o conteúdo interno de qualquer interpretação do shell. Isso significa que caracteres especiais como $, \, `, ! e * são tratados literalmente pelo sed, sem serem expandidos ou interpretados pelo shell.
    • Exemplo: sed 's/\$/VALOR/' arquivo.txt (o $ é tratado como um caractere literal pelo sed).
  • Aspas Duplas (" "):
    • Permitem expansão de variáveis e comandos: As aspas duplas permitem que o shell interprete variáveis ($VAR), expansão de comandos (`comando` ou $(comando)) e algumas sequências de escape (\n, \t).
    • Uso cauteloso: Se você precisar usar variáveis do shell dentro do seu comando sed, as aspas duplas são necessárias. No entanto, isso exige que você escape cuidadosamente os caracteres especiais do sed que também são especiais para o shell (como $, \).
    • Exemplo: VAR="mundo"; sed "s/olá/$VAR/" arquivo.txt (a variável VAR é expandida pelo shell antes de o sed receber o comando).

Melhores Práticas:

  • Prefira aspas simples: Para a grande maioria das operações sed, as aspas simples são a escolha mais segura e menos propensa a erros, pois garantem que o sed receba o comando exatamente como você o escreveu.
  • Use aspas duplas apenas quando necessário: Se você realmente precisa de expansão de variáveis ou comandos, use aspas duplas, mas esteja ciente da necessidade de escapar caracteres especiais para evitar comportamentos inesperados.
  • Teste seus comandos: Se estiver em dúvida sobre como as aspas afetarão seu comando, teste-o em um ambiente seguro ou com um arquivo de teste pequeno.

O domínio do uso de aspas é fundamental para escrever scripts sed robustos e previsíveis.

This post is licensed under CC BY 4.0 by the author.