bonjour,
je voudrais faire un script pour récupérer les dernières versions des logiciels existant sous linux. j'ai donc une liste de fichiers avec la version installée sur le système et l'adresse pour récupérer la dernière version. voici un exemple. je récupère le fichier html distant, je le parse et à la fin, j'ai une chainede laquelle je voudrais extraire la version, à savoir 2.6.26. pour le moment, je fais ça avec substr de awk, ça fonctionne dans tous les cas sauf un. voici le code (moche)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 20060606 libxml2-2.6.26.tar.gz
le +5, c'est pour la longueur de ".tar.", le +2, c'est pour prendre en compte la longueur du "-" +1 pour se placer sur le début de version. en sortie, j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #le nom du paquet PACKAGE_ORIG="libxml2" #son extension déterminée avant dans le script EXTENSION="gz" echo "20060606 libxml2-2.6.26.tar.gz"|awk '{print \ substr($2, \ length("'$PACKAGE_ORIG'")+2, \ length($2)-(length("'$EXTENSION'")+5+length("'$PACKAGE_ORIG'")+2)) \ }' -donc ça marche2.6.26
sauf que ça bug pour un seul paquet : mktemp. voici la chainepour que ça marche, je dois changer le +5 en +4. sauf que seul ce paquet marche et le reste ne marche plus correctement (j'ai un . en fin de chaine). je ne vois vraiment pas d'où vient le problème à part la longueur de la version
Code : Sélectionner tout - Visualiser dans une fenêtre à part 2003041 mktemp-1.5.tar.gz
j'ai pensé à utiliser les expressions régulières, mais je ne suis pas très bon dans ce domaine : je ne sais pas comment lui dire d'extraire la chaine située juste après le dernier "-" (le nom de fichier peut en contenir plusieurs, donc je dois forcément prendre le dernier) et qui s'arrête juste avant l'avant dernier "." (celui qui est situé devant tar.gz)
quelqu'un pourrait m'aider ?
Partager