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.
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].
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ício | Comando Principal | Função |
|---|
| 1.1 | s/\bexemplo\b/EXEMPLO/g | Substituir “exemplo” por “EXEMPLO”. |
| 1.2 | /irrelevante/d | Remover linhas contendo “irrelevante”. |
| 1.3 | /[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)... | Adicionar linha antes de linhas com IPs. |
| 1.4 | s/^[[:space:]]*//;s/[[:space:]]*$// | Remover espaços no início ou fim das linhas. |
| 1.5 | 43s/;/|/g | Substituir ; por | na Linha 43. |
| 1.6 | s/\b[0-9]\+\b/[NÚMERO]/g | Substituir números inteiros por [NÚMERO]. |
| 1.7 | 19s/.*/\U&/ | Converter texto da Linha 19 para maiúsculas. |
| 1.8 | /^$/d | Remover linhas vazias. |
| 1.9 | s/https:/http:/g | Substituir 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
|
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
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].
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.
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].
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.
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ício | Comando Principal | Função |
|---|
| 2.1 | s/.*\([0-9]\{4\}-[0-9]\{2\}...\)/\1/p | Extrair datas no formato AAAA-MM-DD. |
| 2.2 | s/[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]...\) | Substituir e-mails por [EMAIL_OCULTADO]. |
| 2.3 | 42s/\([^,]*\), \([^,]*\),... | Transformar listas delimitadas por vírgulas. |
| 2.4 | /password/i [PRIVADO] | Adicionar [PRIVADO] antes de linhas com senhas. |
| 2.5 | s/R\$\?[0-9]\+,\?[0-9]*/[VALOR]/g | Substituir valores monetários por [VALOR]. |
| 2.6 | 6s/\([^,]*\), \([^,]*\),... | Alterar a ordem de palavras separadas por vírgulas. |
| 2.7 | 39,41s/\[\(.*\)\] \(.*\): \(.*\)/{...} | Transformar logs em formato JSON. |
| 2.8 | s/Latitude: [+-]*[0-9.]\+, Longitude... | Substituir coordenadas por [LAT/LONG]. |
| 2.9 | /[a-zA-Z0-9]\{8,\}/d | Excluir 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
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.
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:
- Primeiro comando:
s/\b[a-zA-Z0-9]\{6,\}\b/\U&/g: Garante que tokens com 6 ou mais caracteres sejam selecionados.
- Segundo comando:
s/\([a-zA-Z0-9]\{5\}\)[a-zA-Z0-9]*/\1/g: Trunca os tokens para os primeiros 5 caracteres.
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.
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:
=:- Exibe os números das linhas antes de cada linha do arquivo.
- Pipeline:
- Combina os números das linhas com o conteúdo usando
N (une duas linhas consecutivas).
s/\n/: /:- Substitui a quebra de linha entre o número e o conteúdo da linha por
: .
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.
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ício | Comando Principal | Função |
|---|
| 3.1 | s/\([0-9]\{4\}\)-\([0-9]\{2\}...\)... | Reorganizar datas no formato DD/MM/AAAA. |
| 3.2 | 39,41s/^/# LOG: / | Adicionar # LOG antes de eventos de log. |
| 3.3 | s/\b[a-zA-Z0-9]\{6,\}...\ | Truncar tokens para os primeiros 5 caracteres. |
| 3.4 | s/^\([a-zA-Z_]\+\)=\(.*\)/\1: \2/ | Alterar chave=valor para chave: valor. |
| 3.5 | /parágrafo/s/\([^ ]*\) \([^ ]*\)... | Reverter palavras em linhas com “parágrafo”. |
| 3.6 | s/\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b//g | Remover valores científicos. |
| 3.7 | /\b\([a-zA-Z]\+\) \1\b/d | Excluir linhas com palavras repetidas consecutivas. |
| 3.8 | = | sed 'N;s/\n/: /' | Adicionar índice crescente às linhas. |
| 3.9 | s|https\?://\([^/]*\)...|\1|g | Substituir URLs pelo domínio. |
| 3.10 | 44,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
|
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
Comando:
1
| sed -e '1i {' -e 's/^Linha \([0-9]*\): \(.*\)/ "linha_\1": "\2",/' -e '$s/,$/\n}/' texto_sed.txt
|
Explicação:
1i {:- Insere
{ na primeira linha (início do JSON).
s/^Linha \([0-9]*\): \(.*\)/ "linha_\1": "\2",/:- Captura o número da linha e seu conteúdo, formatando como
"linha_n": "conteúdo",.
$s/,$/\n}/:- Remove a vírgula final na última linha e insere
} para fechar o JSON.
Comando:
1
| sed -e '1i linhas:' -e 's/^Linha \([0-9]*\): \(.*\)/ - linha: \1\n texto: "\2"/' texto_sed.txt
|
Explicação:
1i linhas::- Insere
linhas: no início do arquivo (cabeçalho do YAML).
s/^Linha \([0-9]*\): \(.*\)/ - linha: \1\n texto: "\2"/:- Formata cada linha como um item YAML, incluindo o número e o texto correspondente.
Comando:
1
| sed -n 's|https\?://\([^/]*\).*|\1|p' texto_sed.txt | sort | uniq
|
Explicação:
https\?://\([^/]*\):- Captura o domínio de URLs no formato
http:// ou https://.
- 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:
sed -n 's/.*\([0-9]\+,\?[0-9]*\).*/\1/p':- Extrai valores monetários.
tr ',' '.':- Converte vírgulas para pontos (para cálculos no formato numérico).
awk:- Soma os valores extraídos.
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.
Comando:
1
| sed -n '/^\[.*\]/s/\[\(.*\)\] \(.*\): \(.*\)/{\n "timestamp": "\1",\n "level": "\2",\n "message": "\3"\n}/p' texto_sed.txt
|
Explicação:
/^\[.*\]/:- Filtra linhas que começam com colchetes (logs).
- 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.
Comando:
1
| sed '=' texto_sed.txt | sed 'N;s/\n/, /' > arquivo.csv
|
Explicação:
=:- Exibe o número da linha antes de cada linha do arquivo.
N;s/\n/, /:- Combina o número da linha com seu conteúdo, separando-os por
,.
> arquivo.csv:- Salva o resultado em um arquivo CSV.
Resumo dos Comandos Especializados
| Exercício | Comando Principal | Função |
|---|
| 4.1 | s/^Linha \([0-9]*\): \(.*\)... | Converter para JSON básico. |
| 4.2 | s/^Linha \([0-9]*\): \(.*\)... | Converter para YAML básico. |
| 4.3 | s|https\?://\([^/]*\)...|\1|p | Listar domínios de URLs. |
| 4.4 | s/\b[0-9]\+\.[0-9]\+\b/[FLOAT]/g | Substituir números flutuantes por [FLOAT]. |
| 4.5 | sed + tr + awk | Somar 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.txt | Criar backup das linhas alteradas. |
| 4.9 | /\b[0-9]\+\.[0-9]\+e[+-][0-9]\+\b/d | Excluir linhas com valores científicos. |
| 4.10 | = | sed 'N;s/\n/, /' > arquivo.csv | Adicionar í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
|
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
|
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'
|
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
| Erro | Causa | Solução |
|---|
| Esquecer de escapar caracteres | Caracteres como /, . ou * são tratados como regex | Use \ para escapar ou delimitadores alternativos. |
| Aplicar substituições globalmente | Uso desnecessário do modificador g | Remova g para afetar apenas a primeira ocorrência. |
Ignorar a opção -i | O arquivo original não é modificado | Use -i para edição in-place. |
| Esquecer de suprimir a saída | Uso do comando p sem -n | Adicione -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
| Comando | Descrição |
|---|
s/padrão/subst/ | Substitui o padrão pela substituição na linha. |
p | Imprime a linha. |
d | Deleta a linha selecionada. |
i texto | Insere texto antes da linha atual. |
a texto | Adiciona texto depois da linha atual. |
c texto | Substitui a linha atual por texto. |
2. Modificadores do Comando s
| Modificador | Descrição |
|---|
/g | Substitui todas as ocorrências na linha. |
/i | Ignora maiúsculas e minúsculas na correspondência. |
/n | Substitui apenas a n-ésima ocorrência na linha. |
3. Seleção de Linhas
| Padrão | Descrição |
|---|
N | Seleciona a linha de número N. |
N,M | Seleciona 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
| Operador | Descrição |
|---|
h | Copia o conteúdo do espaço padrão (pattern space) para o espaço de retenção (hold space). |
g | Substitui o conteúdo do espaço padrão pelo espaço de retenção. |
x | Troca os conteúdos do espaço padrão e do espaço de retenção. |
H | Adiciona 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
| Classe | Descrição | Exemplo |
|---|
[[: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
| Âncora | Descrição |
|---|
^ | Representa o início da linha. |
$ | Representa o final da linha. |
\b | Representa 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
| Caractere | Descrição | Como 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ção | Descrição |
|---|
-n | Suprime a saída padrão; imprime apenas as linhas especificadas. |
-i | Faz edições in-place (diretamente no arquivo). |
-e | Permite adicionar múltiplos comandos em uma única execução. |
-f arquivo | Lê comandos de um arquivo externo. |
9. Exemplos Rápidos
| Comando | Funçã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”. |
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.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.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.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.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.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.
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
| Ferramenta | Uso Combinado |
|---|
grep | Filtrar linhas antes de processar com o sed. |
awk | Realizar cálculos ou reorganizar dados após substituições. |
find | Localizar arquivos e aplicar transformações neles. |
xargs | Passar resultados de um comando para o sed em massa. |
| Shell | Criar 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.
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.
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 Uso | Script/Comando Principal |
|---|
| Geração de Backups | cp "$file" "${file%.txt}_$(date +%Y%m%d).bak" |
| Limpeza de Dados | sed -i 's/[[:space:]]\+/ /g' |
| Relatórios CSV | sed 's/^Linha \([0-9]*\): \(.*\)/\1, "\2"/' |
| Exportação de Logs Críticos | grep 'ERROR' | sed 's/\[ERROR\]/[CRITICAL]/g' |
| Logs para JSON | sed 's/\[\(.*\)\] \(.*\): \(.*\)/.../' |
| Renomear Arquivos | mv "$file" "$(echo "$file" | sed 's/ /_/g')" |
| Extração de E-mails | sed -n 's/.../\1/p' |
| Markdown para Tabelas | sed 's/,/ | /g;s/^/| /;s/$/ |/' |
| Inventários para Ansible | sed 's/.../- name: \1\n ip: \2/' |
| Validação de Configuração | sed -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.
| Caractere(s) | Descrição | Exemplo no sed | Explicação |
|---|
. | Corresponde a qualquer caractere (exceto nova linha). | s/./X/g | Substitui 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. |
\b | Corresponde 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/g | Substitui todas as vogais por X. |
[^ ] | Corresponde a qualquer caractere que NÃO esteja dentro do conjunto. | s/[^0-9]/X/g | Substitui 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:
| Classe | Descrição | Equivalente |
|---|
[: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.
|
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
|
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.
|
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.
|
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:
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.
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.