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 :

Découper une chaine de caractères en shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut Découper une chaine de caractères en shell
    Bonjour,

    J'ai un répertoire contenant des fichiers avec cette nomenclature :

    00000_CODE_PROJ_NS_0000000000_0000000000.ext "CODE peut prendre plusieurs valeurs, j'ai une dizaines de fichiers comme ça"
    00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext "CODE peut prendre plusieurs valeurs, j'ai à peu prés 3 fichiers comme ça"

    J'aimerai faire un ls en récupérant seulement le pour "00000_CODE_PROJ_NS_0000000000_0000000000.ext" et le CODE_SUFIX pour "00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext".

    Mes compétences en shell s'arrêtent dans l'affichage du CODE seulement, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls * | cut -c7- | cut -d "_" -f1
    J'aimerai une commande qui m'affiche à la fois CODE et CODE_SUFIX.

    Pourriez vous m'aider ?

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    echo à remplacer par ton ls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 00000_CODE_PROJ_NS_0000000000_0000000000.ext  | sed 's%[^_]*_\(.*\)_[^_]*_[^_]*_[^_]*_[^_]*.ext%\1%'
    echo 00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext  | sed 's%[^_]*_\(.*\)_[^_]*_[^_]*_[^_]*_[^_]*.ext%\1%'
    [^_]* = zone de texte ne contenant pas le caractère : _

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Bonjour,

    Merci de ta réponse. J'ai toutefois trouvé une solution en cherchant un peu du awk "parsing". Voici la commande qui marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls * | awk -F_ '{if($3 != "PROJ") {print $2"_"$3;} else if($3 == "PROJ") print $2;}'
    Cordialement.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Bonjour,

    Une autre façon simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls * | grep -o -E '(CODE_SUFIX|CODE)'
    Et dans ce cas, tu peux utiliser 'echo *' à la place de 'ls *'

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Cette solution est plus simple si "CODE et CODE_SUFIX" sont des valeurs stables. Or, "CODE et CODE_SUFIX" sont des variables.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 352
    Par défaut
    Ok, l'énoncé du problème n'est pas super claire...
    Donc, si je reprend ton idée de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo * | tr ' ' '\n' | cut -d\_ -f2-3 | sed 's/_PROJ//'
    le tr est juste là pour eviter 'ls *' et utiliser 'echo *' à la place.

+ 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. [Korn Shell] Découper une chaine de caractères
    Par Oishiiii dans le forum Linux
    Réponses: 2
    Dernier message: 13/07/2010, 11h08
  3. Réponses: 6
    Dernier message: 15/04/2007, 13h06
  4. [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