Estou tentando fazer um script que , de uma lista com pacotes , separe
por nome de programa e versao .
a lista eh mais ou menos essa :
[lista]
iputils-20020927-11.30.1
irda-utils-0.9.15-1
isdn4k-utils-3.1-76
jakarta-regexp-1.2-12
jfsutils-1.1.2-2
jpackage-utils-1.5.38-1jpp_5rh
jwhois-3.2.2-1
kbd-1.08-10.2
kdebase-3.1.3-5.9
kdelibs-3.1.3-6.10
kernel-2.4.21-15.EL
kernel-2.4.21-27.0.4.EL
kernel-2.4.21-32.0.1.EL
kernel-pcmcia-cs-3.1.31-13
kernel-smp-2.4.21-15.EL
kernel-smp-2.4.21-27.0.4.EL
kernel-smp-2.4.21-32.0.1.EL
kernel-utils-2.4-8.37.12
krb5-libs-1.2.7-47
krb5-workstation-1.2.7-47
krbafs-1.1.1-11
krbafs-utils-1.1.1-11
kudzu-1.1.22.11-1
[/code]
o codigo que eu fiz ateh agora foi esse
[script]
lista1="/Fabricio/scripts/s.pi7"
lista2="/Fabricio/scripts/s.pi10"
tmp1="/tmp/lista1"
tmp2="/tmp/lista2"
while read program ; do
let i=2
for field in "1" "1,2" "1,2,3" ; do
version=$(echo $program | cut -d"-" -f${i})
version=$(echo $version | sed 's/[a-zA-Z]\{6,\}.*//g' )
version=$(echo $version | sed s/[^0-9]//g )
version=$(echo $version | sed s/\./1234567/g )
#if [[ $version == [^A-Za-z]*[0-9]* ]] ; then
if [[ ${#version} -ge 1 ]] ; then
version=$(echo $program | cut -d"-" -f${i}-9)
program=$(echo $program | cut -d"-" -f"$field")
echo "$program $version" | awk '{ printf "| %30-s --|--
%18s |\n",$1,$2}'
grep -v $program $tmp1 > $tmp2
mv $tmp2 $tmp1
flag=1
break
fi
done
done < $lista1
[/script]
tentando explicar :
primeiramente eu jah chego a conclusao que o nome do pacote é no
mínimo o primeiro campo com separador "-" e , logicamente , a versão é
do segundo campo para frente
condicoes o campo ser versao :
conter "."
conter mais de 1 numero
porem :
existem pacotes com numeros no nome
o que esta sendo complicado é definir o que é um campo de versão ,
pois depois de achar este campo , todos os seguintes fazem parte da
versão !
alguem tem alguma ideia ou ajuda ?? :)
---------------------------------------------------------------------
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
---------------------------------------------------------------------
Links do Yahoo! Grupos