OVH Cloud OVH Cloud

Extraire une chaine de caractere

7 réponses
Avatar
maxx
Salut,

Je souhaite extraire dans cette chaine de caractere suvante
"kernel-module-qemu-0.7.2-2.2.6.13_1.1526_FC4", le numero de version du
kernel correspondant, c'est =E0 dire "2.6.13_1.1526_FC4".
Seulement, l=E0 ou je bloque, est que le numero de version peut changer.
Par exemple "2.6.13_1.1700_FC4" ou "2.6.14_1.1226_FC4".
Quelqu'un aurait une id=E9e?

Merci.

7 réponses

Avatar
kurtz le pirate
In article ,
"maxx" wrote:

::Salut,
::
::Je souhaite extraire dans cette chaine de caractere suvante
::"kernel-module-qemu-0.7.2-2.2.6.13 1.1526 FC4", le numero de version du
::kernel correspondant, c'est à dire "2.6.13 1.1526 FC4".
::Seulement, là ou je bloque, est que le numero de version peut changer.
::Par exemple "2.6.13 1.1700 FC4" ou "2.6.14 1.1226 FC4".
::Quelqu'un aurait une idée?
::
::Merci.

dans ta chaine de caractères, quelle est la partie variable ? ou quelle
est la partie fixe ?
Avatar
MaXX
Hello,
maxx wrote:
Salut,
Je souhaite extraire dans cette chaine de caractere suvante
"kernel-module-qemu-0.7.2-2.2.6.13_1.1526_FC4", le numero de version du
kernel correspondant, c'est à dire "2.6.13_1.1526_FC4".
Seulement, là ou je bloque, est que le numero de version peut changer.
Par exemple "2.6.13_1.1700_FC4" ou "2.6.14_1.1226_FC4".
Quelqu'un aurait une idée?


Essaye ça

$ligne="kernel-module-qemu-0.7.2-2.2.6.13_1.1526_FC4";
if (defined $ligne && ($ligne =~ /(.+)-(.+)$/)){
$num_de_version=$2;
};
print $num_de_version;

--
MaXX

Avatar
MaXX
Essaye ça

$ligne="kernel-module-qemu-0.7.2-2.2.6.13_1.1526_FC4";
if (defined $ligne && ($ligne =~ / (.+)-(.+)$ /)){

$num_de_version=$2;
};
print $num_de_version;

Sorry, j'avais pas fait gaffe, entourer un mot avec 2 / le met en italique

sur les lecteurs de news...

--
MaXX

Avatar
maxx
Les composantes fixes sont "2.6." et "_FC4". Donc, le numero peut
ressembler à ça "kernel-module-qemu-x.x.x-x.2.6.xx_x.xxxx_FC4" et le
numero de version une fois extraite "2.6.xx_x.xxxx_FC4"
Avatar
maxx
Il me sort pratiquement la bonne structure, sauf j'ai un "2." en trop
au debut de la chaine resultante :
"2.2.6.143_1.1526_FC4" au lieu de "2.6.143_1.1526_FC4".
Avatar
MaXX
maxx wrote:
Il me sort pratiquement la bonne structure, sauf j'ai un "2." en trop
au debut de la chaine resultante :
"2.2.6.143_1.1526_FC4" au lieu de "2.6.143_1.1526_FC4".
Je présume que c'est pour faire du traitement en serie.

Le [1 chiffre]+[1 point] en trop est présent pour tout les nums de version??
Dans ce cas:
my $num_de_version;
my $ligne="kernel-module-qemu-0.7.2-2.2.6.13_1.1526_FC4";
if (defined $ligne && ($ligne =~ / (.+)-(d.)(.+)$ /)){
$num_de_version=$3;
};
print $num_de_version;

Si tu utilise KDE sur ton linux, regarde dans utilitaire->plus
d'appl->kregexp, ça aide à les construire facilement.

--
MaXX

Avatar
maxx
Merci :-)

Je connaissais pas "kregexp", je vais regarder ça.

++