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 :

Chaine de caractères à découper


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Par défaut Chaine de caractères à découper
    Bijour,

    J'ai un souci de découpage de chaines de caractère dans un de mes scripts.
    je m'explique ...
    j'obtiens une variable de cette forme sur une seule et même ligne :

    16/0/3994//0/1/VS_CTC,11/1/1/455,456,461,802/2/1/VS_XXX1,12/1/2/105/1/1/VS_XXXX3,13/1/3/458/1/1/VS_XXX2,14/0/3996//0/1/VVS_XX1,15/0/3995//0/1/VS_XX1
    que je souhaiterais mettre de la forme suivante dans un fichier
    16/0/3994//0/1/VS_CTC
    11/1/1/455,456,461,802/2/1/VS_XXX1
    12/1/2/105/1/1/VS_XXXX3
    13/1/3/458/1/1/VS_XXX2
    14/0/3996//0/1/VS_XX1
    La structure d'entrée est de la forme suivante :
     /*/*/*/*/*/*/*,
    ou
    /*/*,*/*,*/*/*/*/*,
    je ne peux donc pas utiliser le caractère , comme caractère de séparation.

    cette structure peut se répéter à plusieurs reprises sur une seule ligne exemple :
    VAR = /*/*,*/*,*/*/*/*/*,/*/*/*/*/*/*/*,/*/*/*/*/*/*/*,
    ou bien
    VAR = /*/*/*/*/*/*/*,/*/*,*/*,*/*/*/*/*,/*/*,*/*,*/*/*/*/*,/*/*,*/*,*/*/*/*/*,/*/*,*/*,*/*/*/*/*,
    je pense qu'un sed avec un bonne expression régulière devrait faire l'affaire, mais je n'arrive pas à mettre en forme cette commande. Can you help me ?

    Merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ echo ${VAR}
    16/0/3994//0/1/VS_CTC,11/1/1/455,456,461,802/2/1/VS_XXX1,12/1/2/105/1/1/VS_XXXX3,13/1/3/458/1/1/VS_XXX2,14/0/3996//0/1/VVS_XX1,15/0/3995//0/1/VS_XX1
     
    $ sed 's#/[[:alpha:]][^,]*,#&\n#g' <<<${VAR} | sed 's/,$//'
    16/0/3994//0/1/VS_CTC
    11/1/1/455,456,461,802/2/1/VS_XXX1
    12/1/2/105/1/1/VS_XXXX3
    13/1/3/458/1/1/VS_XXX2
    14/0/3996//0/1/VVS_XX1
    15/0/3995//0/1/VS_XX1
     
    $

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Ou plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's#\(/[[:alpha:]][^,]*\),\([^/]*\)#\1\n\2#g' <<<$VAR

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Par défaut
    Yes, merci beaucoup !!!!

  5. #5
    Invité de passage
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1
    Par défaut Pinaillage
    Hello,

    L'énoncé est bancal :

    La structure d'entrée est de la forme suivante :
    /*/*/*/*/*/*/*,
    ou
    /*/*,*/*,*/*/*/*/*,
    alors que la structure d'entrée se modélise sur 6 "/" seulement, soit un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     /*/*/*/*/*/*,
    ou 
    /*/*,*/*,*/*/*/*,
    La réponse ne répond pas à l'énoncé faux (haha) : il est supposé que la "structure d'entrée" se termine par un mix d'alpha et d'autre chose. C'est plutôt périlleux...

    Bon alors je propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ echo $(echo $VAR | sed 's#\(\([^\/]*\/\)\{6\}[^,]*\),#\1\\n#g')
    16/0/3994//0/1/VS_CTC
    11/1/1/455,456,461,802/2/1/VS_XXX1
    12/1/2/105/1/1/VS_XXXX3
    13/1/3/458/1/1/VS_XXX2
    14/0/3996//0/1/VVS_XX1
    15/0/3995//0/1/VS_XX1
    sur de l'aix+ksh


    Vous me direz je pinaille peut-être alors que tout le monde semblait content comme au décollage de challenger..

    Bonne journée et joyeuses fêtes à tous (et aux machecoulais en particulier ) !

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

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 13h18
  2. Réponses: 3
    Dernier message: 15/04/2011, 13h58
  3. [SQ2K] Découper une chaine de caractères
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2007, 19h22
  4. Réponses: 6
    Dernier message: 15/04/2007, 13h06
  5. [VBA] Découper une chaine de caractères
    Par rantanplan81 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2007, 15h26

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