shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] problema de portabilidade


From: Humberto Pereira
Subject: Re: [shell-script] problema de portabilidade
Date: Thu, 20 Apr 2006 11:51:18 -0300
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060404 SeaMonkey/1.0.1

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: address@hidden
---------------------------------------------------------------------
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









reply via email to

[Prev in Thread] Current Thread [Next in Thread]