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 POSIX Discussion :

sed détection d'une chaine et MAC


Sujet :

Shell et commandes POSIX

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 201
    Points : 150
    Points
    150
    Par défaut sed détection d'une chaine et MAC
    Bonjour,

    Je dois au sein d'une chaine détecter une occurrence en fonction d'un masque de référence.
    La chaine doit etre composé du mot "LOT" ou du symbole "#' suivi d'une serie de chiffres au nombre de 1 à 4, suivi d'une lettre optionnel. Enfin une autre serie de chiffre optionnel au format monétique suivi d'un symbole "€", elle aussi optionnel.

    Quelques exemples concrets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #123
    LOT123
    LOT  123
    #123A
    LOT   123     A
    LOT   123   A    4.000.000    €
    #      123   A    €    4.000.000
    Si l'un de ces format de chaine est détecter, je dois extraire le N° de LOT avec la lettre si elle existe (123A pour l'exemple)

    J'ai du le faire dans un premier temps sous linux ou, avec de l'aide, je suis arrivé à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res="LOT 123a 4.000€"
    res1=$(echo $res | sed -r 's/((#|lot|Lot|LOT|LQT)?(\s|\s+)?([0-9]{1,3})[\s|\s+]?([a-zA-Z]?))((€|EUR|EURO)?(\s|\s+)?([0-9\.]+).*)?/\4\5|\9/;s/\.//g' | tr [a-z] [A-Z])
    L'option -r n'existant pas sous Mac (d'après ce que j'ai lu) j'ai remplacé par -E. Mais j'obtiens des résultats totalement incohérent...
    J'ai bien conscience que ma ligne n'est pas hyper optimisé, mais il faut bien garder à l'esprit que la chaine d'où je dois extraire le N° de lot doit absolument avoir une composition strict, histoire de ne pas extraire n'importe quel chiffres...

    J'ai donc besoin d'aide...

    Par avance merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 201
    Points : 150
    Points
    150
    Par défaut
    J'ai obtenu une réponse valide sur un forum spécialisé Mac.

    sed sous OS 10 ne connait pas '\s' (et peut etre '+'), il faut donc mettre [[:space:]]* à la place de \s*

    Ce qui donne comme resultat pour mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res1=$(echo $res | sed -E 's/^(#|lot|Lot|LOT|LQT)[[:space:]]*([0-9]{1,4})[[:space:]]*([a-zA-Z]?)[[:space:]]*((€|EUR|EURO)?[[:space:]]*([0-9.]+))?.*/\2\3|\6/;s/\.//g' | tr [a-z] [A-Z])

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

Discussions similaires

  1. [sed] Extraction d'une chaine
    Par cubepiege dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 30/03/2015, 14h06
  2. sed : insertion d'une chaine variable au début de chaque ligne
    Par zaltalux dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/08/2012, 11h30
  3. [RegEx] Détection d'une chaine présente plusieurs fois par ligne
    Par Tchupacabra dans le forum Langage
    Réponses: 6
    Dernier message: 03/07/2009, 16h54
  4. utilisation de SED pour ajouter une chaine de caractère en début de texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/03/2008, 09h12
  5. Réponses: 9
    Dernier message: 19/10/2006, 17h02

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