Ver Indice Geral da Apostila de SED
Endereço com Expressão Regular
Já vimos que o SED aceita expressão regular, já vimos que o SED encontra linhas que possuam uma palavra, já vimos que o SED substitui uma palavra por outra...
Então vamos juntar tudo?
- Juntar tudo? - você me pergunta - Como assim?
Vamos usar uma expressão regular para encontrar diversas linhas e substituir palavras nessa linha.
- Como? - você me pergunta novamente.
Vamos para a prática que é melhor.
Lembra que nosso texto começa com a data "28-05-2008", imagine que você queira modificar o formato da data para "28/05/2008".
- Ah! Mas isso é fácil é só usar sed "s/-/\//g" - Você me diz
Boa tentativa, mas não daria muito certo... Lembre-se que nesse arquivo temos a linha:
- Oi! Seu cachorrinho tem telefone?
Usando seu método a linha ficará:
/ Oi! Seu cachorrinho tem telefone?
O que faremos então?
Simples, definiremos, através de uma Expressão Regular, que a linha a ser substituída é a que contém a data e que será substituído "-" por "/"
Mas antes de ir direto ao ponto, vamos por passos para ficar mais fácil
| Digite no Terminal |
sed "/28-05-2008/s/-/\//g" mensagem
|
| Mostrará na tela |
28/05/2008
Olá,
Estarei em casa semana que vem, no dia 4.
pq vc ñ vem para gente fazer aquele trabalho que precisamos fazer?
Hj estava passeando com meu cachorro e veio um cara e disse:
- Oi! Seu cachorrinho tem telefone?
Que coisa tosca meu! Você ñ acha? ñ sei o que esse povo tem na cabeça.
Abraços
|
Até agora fácil de entender:
/28-05-2008/ Faz o SED pegar a linha que possuir "28-05-2008"
s/-/\//g Faz o SED substituir "-" por "/"
Atenção:A barra invertida ( \ ) antes da barra / serve para o SED entender que queremos literalmente a barra /, caso contrário o SED se confundirá e achará que estamos finalizando um comando.
Agora vamos fazer o SED buscar por qualquer data de 01-01-0000 até 31-12-9999
Vamos pensar...
Um mês tem no máximo 31 dias, então o primeiro dígito do dia só pode ser 0,1,2 ou 3.
O segundo dígito de dia pode ser de 0 a 9...
Então definimos para os dias:
[0-3][0-9]
O primeiro dígito para definir o mês pode ser 0 ou 1.
E o segundo dígito também vai de 0 a 9.
[01][0-9]
Para definir ano de 0000 até 9999 os quatro dígitos vão de 0 a 9
[0-9][0-9][0-9][0-9]
Então para definir o tipo de data xx-xx-xxxx fica:
[0-3][0-9]-[01][0-9]-[0-9][0-9][0-9][0-9]
Veja como fica
| Digite no Terminal |
sed "/[0-3][0-9]-[01][0-9]-[0-9][0-9][0-9][0-9]/s/-/\//g" mensagem
|
| Mostrará na tela |
28/05/2008
Olá,
Estarei em casa semana que vem, no dia 4.
pq vc ñ vem para gente fazer aquele trabalho que precisamos fazer?
Hj estava passeando com meu cachorro e veio um cara e disse:
- Oi! Seu cachorrinho tem telefone?
Que coisa tosca meu! Você ñ acha? ñ sei o que esse povo tem na cabeça.
Abraços
|
- E se eu substituir a ER de ano de "[0-9][0-9][0-9][0-9]" para "[0-9]{4}"? Afinal as chaves vão indicar que quero 4 dígitos de 0-9, certo?
Certo! Mas para funcionar você precisa chamar o SED com a opção "-r" que ativa expressões regulares extendidas, sem a opção "-r" não funciona!
Veja como fica:
| Digite no Terminal |
sed -r "/[0-3][0-9]-[01][0-9]-[0-9]{4}/s/-/\//g" mensagem
|
Nota: 10
Postado em: 2008-06-11
Ver Indice Geral da Apostila de SED