[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Removento trechos de uma string
From: |
Humberto Pereira |
Subject: |
Re: [shell-script] Removento trechos de uma string |
Date: |
Wed, 13 Sep 2006 14:16:42 -0300 |
User-agent: |
Opera Mail/9.01 (Linux) |
On Wed, 13 Sep 2006 13:29:34 -0300, address@hidden
<address@hidden> 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:
[begnini@coke tmp]$ SRC="scilab-3.9.7.tar.gz"
[begnini@coke tmp]$ echo $SRC | sed -r 's/^(.*)-((\.?[0-9])+)\.(.*)$/\1 \2
\4/'
scilab 3.9.7 tar.gz
[begnini@coke tmp]$
e com eval voce coloca as informacoes nas variaveis:
[begnini@coke tmp]$ echo $SRC | sed -r
's/^(.*)-((\.?[0-9])+)\.(.*)$/PACKAGE=\1; VERSION=\2; EXTENSION=\4;/'
PACKAGE=scilab; VERSION=3.9.7; EXTENSION=tar.gz;
[begnini@coke tmp]$ eval $(echo $SRC | sed -r
's/^(.*)-((\.?[0-9])+)\.(.*)$/PACKAGE=\1; VERSION=\2; EXTENSION=\4;/')
[begnini@coke tmp]$ echo $PACKAGE
scilab
[begnini@coke tmp]$ echo $VERSION
3.9.7
[begnini@coke 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:
[begnini@coke tmp]$ SRC="scilab-3.9.7alpha.tar.gz"
[begnini@coke tmp]$ echo $SRC | sed -r
's/^(.*)-(.*)\.((\.?[a-z0-9]{2,3}){2})$/\1 \2 \3/'
scilab 3.9.7alpha tar.gz
[begnini@coke 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/