Opa,

      sempre estamos ae, rodando shell scripts em HP-UXes, Solaris, AIX,
Linuxes, BSDs, SCOs, qquer coisa q entenda um #!/bin/sh

O seu problema estao com esse segundo sed. Essa expressao regular eh
enorme :/
Mas vamos lah. Dissecando-a:

"/^[1-9].*/!d;s/\([0-9]\{1,\}\(\.[0-9]\{1,\}\|\)\)[[:space:]]\([0-9]\{1,\}\/[0-9]\{1,\}\/[0-9]\{1,\}\)[[:space:]]\([0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}\)/insert
into minha_tabela values ('$TAG' '\1', '\3', '\4');/g" $1)

A primeira parte
      /^[1-9].*/!d;
deleta tudo q nao comeca com numeros (de 1 a 9).
Depois entra na substituicao. E forma o primeiro grupo
(segunda parte). Vou remover os '\' p/ ficar + facil ler:

([0-9]{1,}
      (.[0-9]{1,}|)
)

Voce tem um grupo aninhado estranho ae. O grupo mais externo pega 1 ou +
numeros (seria o mesmo q [[:num:]]+, mas nem todos os sed's aceitam o
operador '+'). Depois, se ele encontra um '.' e numeros ou nada, casa
tbm. Mas ate onde eu sei, esse nada nao funciona.

O que voce quer eh pegar tudo q tenha numeros e talvez ponto e +
numeros. Algo como ([0-9]+(.[0-9]+)?). Mas o sed nao tem '?'. Entao
temos q mudar p/ ([0-9]+.{0,1}[0-9]*) Traduzindo isso para o mundo UNIX,
ficaria

      \([0-9]\{1,\}\.\{0,1\}[0-9]*\)

Bem feinho hein? :) Mas funciona.
Entao sua segunda linha do sed ficaria:


LINHA=$($SED
"/^[1-9].*/!d;s/\([0-9]\{1,\}\.\{0,1\}[0-9]*\)[[:space:]]\([0-9]\{1,\}\/[0-9]\{1,\}\/[0-9]\{1,\}\)[[:space:]]\([0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}\)/insert
into minha_tabela values ('$TAG' '\1', '\2', '\3');/g" $1)


Lembrando q como vc removeu um grupo, os seus grupos vao apenas de 1
ateh 3, e nao ateh 4 +.


[]s
Humberto Pereira


Reinaldo Marques de Lima wrote:
> Caros amigos,
>
> estou tentando ajudar um companheiro que esta com dificuldade na execução de
> um script que eu fiz para ele, o problema é o seguinte.
>
> Eu executo o script na minha maquina ( Ubuntu 5.04 ) sem problemas, mas
> quando ele tenta executar na maquina dele ( HP-UX 10.20 ) o script não se
> aplica da maneira que deveria, vou postar aqui o script para que alguem que
> tbm use HP-UX ( se existir alguem na lista ) possa apontar o erro, desde já
> agradeço.
>
> Aqui vai o "grosso" do script, sem comentarios e afins...
> ==================Script==============================
>
> #!/bin/bash #{pra ele, troca-se aqui por #!/bin/sh}#
>
> SED=$(which sed)
>
> [ -z $1 ] && echo "use: $0 [ nome do arquivo ]" && exit
>
> TAG=$($SED '/.* \$.*/!d;s/.* \(\$.*\)/\1/' $1)
>
> LINHA=$($SED
> "/^[1-9].*/!d;s/\([0-9]\{1,\}\(\.[0-9]\{1,\}\|\)\)[[:space:]]\([0-9]\{1,\}\/[0-9]\{1,\}\/[0-9]\{1,\}\)[[:space:]]\([0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}\)/insert
> into minha_tabela values ('$TAG' '\1', '\3', '\4');/g" $1)
>
> echo "$LINHA"
>
> ==================Fim do Script=========================
>
>
> agora os testes:
>
> Ele me passou 2 arquivos para teste:
>
> 1 -  Modelo
> ==================================
> Dados do periodo de 01-JAN-06 ate 01-JAN-06
> TAG: $HSAWHGR-RP1-3-o
> ==================================
> 327 01/01/2006 00:01:00
> 342 01/01/2006 01:01:00
> 329 01/01/2006 02:01:00
>
> 2 - Modelo
> ===========================================
> Dados do periodo de 01-JAN-06 ate 12-APR-06
> TAG: $HSTU3DTWVE-m-4-o
> ===========================================
> 22.983971       01/01/2006 00:01:00
> 23.029369       01/01/2006 00:02:00
> 23.037775       01/01/2006 00:03:00
> 23.04282        01/01/2006 00:04:00
>
>
> E aqui vai a saida destes arquivos como deve ficar depois da execução do
> script.
>
> 1- Modelo formatado
>
> insert into minha_tabela values ('$HSAWHGR-RP1-3-o' '327', '01/01/2006',
> '00:01:00');
> insert into minha_tabela values ('$HSAWHGR-RP1-3-o' '342', '01/01/2006',
> '01:01:00');
> insert into minha_tabela values ('$HSAWHGR-RP1-3-o' '329', '01/01/2006',
> '02:01:00');
>
>
> 2 - Modelo formatado
>
> insert into minha_tabela values ('$HSTU3DTWVE-m-4-o' '22.983971',
> '01/01/2006', '00:01:00');
> insert into minha_tabela values ('$HSTU3DTWVE-m-4-o' '23.029369',
> '01/01/2006', '00:02:00');
> insert into minha_tabela values ('$HSTU3DTWVE-m-4-o' '23.037775',
> '01/01/2006', '00:03:00');
> insert into minha_tabela values ('$HSTU3DTWVE-m-4-o' '23.04282',
> '01/01/2006', '00:04:00');
>
> Repetindo, em meu computador o script funciona legal, mas no dele nada
> acontece, inclusive não acusa nenhum tipo de erro, somente a formatação não
> acontece da maneira esperada 8^S .
>
> Bem, é isso, se alguem puder me indicar o caminho das pedras, pq eu
> particularmente estou quase jogando a toalha.
>
>
> mais uma vez obrigado
>
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>

> Links do Yahoo! Grupos
>
>
>
>

>
>
>



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil





Links do Yahoo! Grupos

Responder a