IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Extraction de la fin d'une chaine


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Programmeur
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut Extraction de la fin d'une chaine
    Bonjour,

    Après quelques heures de galère, j'ai réussi à mettre au point une commande 'simple' permettant l'extraction de la fin d'une chaine.
    Comme je ne suis pas content du résultat, je soumet mon problème aux nombreux experts qui surfent sur ce forum.


    La problèmatique
    En entrée est fourni une chaine de caractère ayant un format indéterminé mais dont la fin contient, sur plusieurs digits séparés par des points, un numéro de version qui est l'objet de ma recherche. Les origines de ces données étant aussi diverses que leurs formats il est donc impossible de les contraindre.


    Exemples
    CRD_code_decode_02.3.12
    CRD_data_4.0.2
    AD3_pricer_1.3.5
    AD3-list.5.4.6
    CRD5.7


    L'objectif
    Obtenir en sortie le numéro complet situé en fin de chaîne.
    Sachant que je me suis fixé comme contrainte que cette extraction soit faite par une commande batch sous unix la plus compact possible.


    Ma proposition

    echo CRD_code_decode_02.3.12 | sed -n 's/\([0-9\.]*\)$/*\1/p' | sed -n 's/[^\*]*\*\.*\(.*\)$/\1/p'
    Explication, un premier sed ajoute un séparateur juste devant le numéro de version, le deuxième sélectionne tout ce qui suit le caractère ajouté à l'étape précédente et l'affiche.

    Pensez vous qu'il est possible de simplifier cette ligne ?
    Merci pour vos avis

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut
    Bonjour,

    Je peux te proposer le code suivant, qui utilise uniquement les substitutions du shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=CRD_code_decode_02.3.12
    echo ${x#${x%%[0-9][0-9.]*}}
    La substitution en %% supprime le nombre à points en fin de chaîne et la substitution en # supprime le début de la chaîne que l'on vient d'isoler.

    Pour l'appliquer à toutes les lignes d'un fichier, il faudra faire une boucle, ceci dit...

    Sinon, en sed, je suis loin d'être un expert mais je peux te proposer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n 's/^\(.*[^0-9.]\)\{0,\}\.*\([0-9][0-9\.]*\)$/\2/p'
    Là, on essaie d'englober la chaîne entière en prenant soin de ne pas empiéter sur le nombre en fin.

  3. #3
    Nouveau membre du Club
    Profil pro
    Programmeur
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    parfait

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Detecter la fin d'une chaine.
    Par sloshy dans le forum Débuter
    Réponses: 11
    Dernier message: 19/08/2007, 17h38
  2. Rajout de caractère à la fin d'une chaine
    Par horneth dans le forum VB.NET
    Réponses: 9
    Dernier message: 02/02/2007, 17h20
  3. [regexp] supprimer la fin d'une chaine
    Par novices dans le forum Langage
    Réponses: 3
    Dernier message: 22/08/2006, 22h23
  4. Comment trouver la fin d'une chaine ?
    Par beloc dans le forum Linux
    Réponses: 2
    Dernier message: 02/06/2006, 14h36
  5. [langage] supprimer le "/" à la fin d'une chaîne
    Par sommerset dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo