Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2006, 12h15   #1
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
Par défaut Problème avec awk

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 chaine
Code :
20060606 libxml2-2.6.26.tar.gz
de 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 :
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)) \
    }' -
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
Citation:
2.6.26
donc ça marche
sauf que ça bug pour un seul paquet : mktemp. voici la chaine
Code :
2003041 mktemp-1.5.tar.gz
pour 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
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 ?
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 12h57   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 553
Points : 7 553
Si ton shell le supporte, tu peux faire ça :
Code :
1
2
3
4
extension=".tar.gz"
package="20060606 libxml2-2.6.26.tar.gz"
version=${package##*-}
echo ${version%${extension}}
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 13h30   #3
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
j'utilise bash donc ça le supporte
j'ai juste eu un petit problème à cause des fins de lignes vu que je récupère les infos d'un fichier. pour prendre en compte cela, j'ai du ajouter une * à la fin de l'extension : le nom de fichier est en dernier dans le fichier source.
Code :
1
2
3
4
extension=".tar.gz*"
package=#récupération à partir du fichier
version=${package##*-}
echo ${version%${extension}}
et voilà

à toi
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h08.


 
 
 
 
Partenaires

Hébergement Web