On Wed, 13 Sep 2006 13:29:34 -0300, [EMAIL PROTECTED]  
<[EMAIL PROTECTED]> wrote:
> Olá pessoal,
>
> Estou buscando uma forma alternativa de fazer a seleção de trechos
> específicos de uma string. O problema é o seguinte: Tenho o nome de uma
> fonte de um programa no formato "nome-versão.extensão", onde a extensão
> geralmente é .tar.gz ou .tar.bz2. Vou considerar com VERSION tudo entre
> o "-" após o nome e o "." à frente da extensão. O nome (PACKAGE) já
> possuo, mas quero remover a VERSION e a EXTENSION. Estou fazendo da
> forma abaixo:
>
> PACKAGE="scilab"
>
> SRC="scilab-3.9.7.tar.gz"

Ola,

        isso depende de alguns detalhes no formato do nome do seu pacote.
Por ex.: se o nome contiver apenas numeros na versao:

[EMAIL PROTECTED] tmp]$ SRC="scilab-3.9.7.tar.gz"
[EMAIL PROTECTED] tmp]$ echo $SRC | sed -r 's/^(.*)-((\.?[0-9])+)\.(.*)$/\1 \2  
\4/'
scilab 3.9.7 tar.gz
[EMAIL PROTECTED] tmp]$

e com eval voce coloca as informacoes nas variaveis:

[EMAIL PROTECTED] tmp]$ echo $SRC | sed -r  
's/^(.*)-((\.?[0-9])+)\.(.*)$/PACKAGE=\1; VERSION=\2; EXTENSION=\4;/'
PACKAGE=scilab; VERSION=3.9.7; EXTENSION=tar.gz;
[EMAIL PROTECTED] tmp]$ eval $(echo $SRC | sed -r  
's/^(.*)-((\.?[0-9])+)\.(.*)$/PACKAGE=\1; VERSION=\2; EXTENSION=\4;/')
[EMAIL PROTECTED] tmp]$ echo $PACKAGE
scilab
[EMAIL PROTECTED] tmp]$ echo $VERSION
3.9.7
[EMAIL PROTECTED] tmp]$ echo $EXTENSION
tar.gz

Mas pode acontecer do seu pacote conter letras no meio, por ex.  
"scilab-3.9.7alpha.tar.gz", entao voce pode construir um filtro apenas  
pela extensao. Uma extensao tem 2 ou 3 letras, e aparece 1 ou 2 vezes. No  
seu caso, ela sempre aparece 2 vezes, entao dah pra fazer a seguinte regex:


[EMAIL PROTECTED] tmp]$ SRC="scilab-3.9.7alpha.tar.gz"
[EMAIL PROTECTED] tmp]$ echo $SRC | sed -r  
's/^(.*)-(.*)\.((\.?[a-z0-9]{2,3}){2})$/\1 \2 \3/'
scilab 3.9.7alpha tar.gz
[EMAIL PROTECTED] tmp]$

Voce pode ver q no ultimo grupo, eu forco ele a ver 2 extensoes:  
((\.?[a-z0-9]{2,3}){2}), isso por causa q estou usando .*, e como o * tem  
comportamento guloso, se eu usasse o quantificador {1,2} no lugar do {2},  
ele sempre pegaria apenas a ultima extensao. Se alguem souber como  
modificar esse comportamente, seria legal compartilhar :)

[]s
Humberto Pereira



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/


---------------------------------------------------------------------
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

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a