[HS] regex : correspondance numéros de versions

Le
mathias dufresne
Bonjour à tous,

D'abord veuillez excuser cette question qui n'est pas du tout pure Debian..=
.

Je cherche à définir une regex pour "matcher" des numéros de version =
avec awk.

Soit le fichier de test contenant :
3
3.
3.4
3.4.5
3.44.55
3.44.5.66
3.(4.5).6

Le résultat voulu :
3
3.4
3.4.5
3.44.55
3.44.5.66

Le test :
cat versions_file | awk '{ if ( $1 ~ /^[0-9]+[.[0-9]+]*$/) print $1 }'

donne:
3.
3.4
3.4.5
3.44.55
3.44.5.66


En remplaçant le dernier + par * ça donne :
cat versions_file | awk '{ if ( $1 ~ /^[0-9]+[.[0-9]*]*$/) print $1 }'
3
3.
3.4
3.4.5
3.44.55
3.44.5.66

Je n'arrive pas à comprendre où est mon erreur Si quelqu'un peut
m'aider dans mon apprentissage, il serait le bienvenu : )

Cordialement,

Mathias

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/BANLkTimPoegu+RK=y3HMLHim_VPx4U5qHQ@mail.gmail.com
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jeremie Courreges-Anglas
Le #23496141
--=-=- Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

mathias dufresne
Bonjour à tous,

D'abord veuillez excuser cette question qui n'est pas du tout pure Debian ...

Je cherche à définir une regex pour "matcher" des numéros de version avec awk.

Soit le fichier de test contenant :
3
3.
3.4
3.4.5
3.44.55
3.44.5.66
3.(4.5).6

Le résultat voulu :
3
3.4
3.4.5
3.44.55
3.44.5.66



awk '/^[0-9]+(.[0-9]+)*$/' versions_file

(pas besoin de cat)

Le test :
cat versions_file | awk '{ if ( $1 ~ /^[0-9]+[.[0-9]+]*$/) print $1 }'

donne:
3.
3.4
3.4.5
3.44.55
3.44.5.66



Ton utilisation des [ est incorrecte ou plutôt ne correspond pas à   ce
que tu veux faire. [ et ( ont des utilités différentes qui sont t rès
bien expliquées dans tout papier traitant des regexs.

Une autre façon d'écrire ça serait :

awk '$1 ~ /^[0-9]+(.[0-9]+)*$/ { print $1 }' versions_file

Inutile car le résultat ne changera pas mais ça ressemble dé jà plus à
du awk (dont la logique est " PATTERN { ACTION } " ).

--
Jérémie Courrèges-Anglas - GPG key : 06A11494

--=-=- Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (OpenBSD)

iQIcBAEBCAAGBQJOBGh0AAoJEGGRj78GoRSUzLQP+gPzC2zl8LEVrdZLhCNrNyDS
vMQKhK2gtOe13N2jV8/WznIP809/o+jfaqOK+JFBpCPehIWgRjecHeMGrZiImPLd
jHlRkFitS2peR2M3koS8e8OswdYKTgFwVLoNgoEudgJoGv+XwyPIeTysAfE3U2P1
eof2FIr3rbmGeMyC0DzubJ6ukJN2DwR4YCHceooEZ5C+u6Ri51U0G5PQ02SKhT/O
v9Bm5v2jaArxdZ2+DkpcCwfcZEP0kgfnhMZn7ZWf5+11O/+kZUkFbHTwOSO8+XG5
hnoicRY62rzB9JtouNGQAYeNC2XKjAKujAWacq7FFabh1XG4GtOEOZ2COi93kJld
82gFz6lFwT7jdcCRW7USb+VJQtM8f5GJZtXb4eu3upvkMU/z4KT5jLfKyYMKZwKw
vxpypQTerQG03JKiprHxFKegJ4TuHHAYfr5QMZoOdUlZfEo4UtUbT0KpQLEm6t8n
cmmjzykRSV/LZAtiHMMJp3G+xBd9HwFpFXszYgaRv6PCERisNuuXWuBXajyak4kx
c3KzrSY5+TjgGE4ZTOf3WQEEhsjmqw3p++h4GvtB5GkucOizUPuKXkGj9c4j+fg6
NecnsYKLQMimICu0xlbNeLc2ajUP71b6itRjoFFDHZAjXeRYC9VEBQiAFnHg+4kn
XotEtUPGYtyTvICC4GwB
=jwvg
-----END PGP SIGNATURE-----
--=-=-=--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
mathias dufresne
Le #23496521
Un grand merci, j'ai finalement mis la regexp dans une variable et
"matché" sur le contenu de cette variable car ce test est fait dans
une condition if() et les parenthèses multiples rentraient en
conflit...

Merci encore, bon week-end à tous : )

Cdlt,

mathias

Le 24 juin 2011 12:27, Jeremie Courreges-Anglas
mathias dufresne
Bonjour à tous,

D'abord veuillez excuser cette question qui n'est pas du tout pure Debia n...

Je cherche à définir une regex pour "matcher" des numéros de versi on avec awk.

Soit le fichier de test contenant :
3
3.
3.4
3.4.5
3.44.55
3.44.5.66
3.(4.5).6

Le résultat voulu :
3
3.4
3.4.5
3.44.55
3.44.5.66



awk '/^[0-9]+(.[0-9]+)*$/' versions_file

(pas besoin de cat)

Le test :
cat versions_file | awk '{ if ( $1 ~ /^[0-9]+[.[0-9]+]*$/) print $1 }'

donne:
3.
3.4
3.4.5
3.44.55
3.44.5.66



Ton utilisation des [ est incorrecte ou plutôt ne correspond pas à ce
que tu veux faire. [ et ( ont des utilités différentes qui sont trè s
bien expliquées dans tout papier traitant des regexs.

Une autre façon d'écrire ça serait :

awk '$1 ~ /^[0-9]+(.[0-9]+)*$/ { print $1 }' versions_file

Inutile car le résultat ne changera pas mais ça ressemble déjà pl us à
du awk (dont la logique est " PATTERN { ACTION } " ).

--
Jérémie Courrèges-Anglas - GPG key : 06A11494




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme