[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