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 sous-chaine BASH


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 125
    Par défaut Extraction sous-chaine BASH
    Bonjour,

    Dans un script Bash j'ai du mal à extraire une soush-chaine.

    J'ai pas exemple ce nom de fichier: n022.car

    Et je dois en extraire le nombre 022

    Sachant que le nombre peut comporter plus de 3 chiffres.

    J'ai essayé plusieurs manières mais je n'arrive pas à trouver une solution générique pour prendre le nmobre entre le 'n' et le '.'.

    Pouvez m'y aider ?

    Merci beaucoup

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 666
    Par défaut
    Bonjour touronster,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var="n022.car"
    sed 's/^\w\([0-9]*\).*/\1/' <<<"$var"
    022
    echo ${var//[[:alpha:].]/}
    022
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Par défaut
    Salut touronster,
    plusieurs possibilités existent pour arriver au résultat voulu, N_BaH a déjà donné un aperçu des possibilités.
    Ci-dessous, le même résultat avec la commande cut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var="n022.car"
    echo $var | cut -c2- | cut -d. -f1
    022
    A toi de choisir ta recette, bye.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Bonjour,

    je n'ai pas voulu créer de nouveau sujet car mon problème est similaire.
    J'ai un pourcentage, par exemple 1% ou 50%.

    Comment ne récupérer que le premier - ou les deux premiers quand il y en a deux - chiffres (sachant que je ne sais pas d'avance s'il y en a un ou deux) ?

    Merci d'avance.

  5. #5
    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,

    Citation Envoyé par Alwaysin Voir le message
    Bonjour,

    je n'ai pas voulu créer de nouveau sujet car mon problème est similaire.
    J'ai un pourcentage, par exemple 1% ou 50%.

    Comment ne récupérer que le premier - ou les deux premiers quand il y en a deux - chiffres (sachant que je ne sais pas d'avance s'il y en a un ou deux) ?

    Merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ A="150%"
    
    $ echo ${A/\%/}
    150
    
    $ A="1%"
    
    $ echo ${A/\%/}
    1

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Merci pour la réponse !
    Cela semble bon mais ça ne marche pas pour moi :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A=$(df | awk 'NR==5 {print $5}')
    echo $A
    1%
    
    echo ${A/\%/}
    /mnt/dir/file.sh: ${A/...}: Bad substitution

  7. #7
    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
    Faisons plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=$(df | awk 'NR==5 { sub("%","",$5); print $5 }')

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Cela fonctionne, merci beaucoup !

    (A propos, je trouve cette façon de faire plus compliquée que l'autre :p)

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Une solution portable :

  10. #10
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Par défaut raccourcis de classes de caractères
    bonjour, je décortique la réponse de N_BaH

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/^\w\([0-9]*\).*/\1/' <<< "$var"
    et la signification du \w (minuscule)

    J'ai lu que \w était un raccourci de classe qui correspondait à un mot pouvant contenir les caractères alphanumériques _a-zA-Z0-9 (??)

    Si je teste la commande sed NON PAS avec var="n022.car", mais avec var="nnnn022.car", ca ne marche pas; j'en déduis que je n'ai pas compris ce que représentait \w

    puis je avoir une explication ?, et pourrais je savoir POUR BASH où est ce qu'on peut trouver le tableau et la signification de ces raccourcis (s'il s'agit bien d'un raccourci). Dans l'abs-guide, je ne l'ai pas trouvé ????

  11. #11
    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,
    Citation Envoyé par syncope_nc Voir le message
    J'ai lu que \w était un raccourci de classe qui correspondait à un mot pouvant contenir les caractères alphanumériques _a-zA-Z0-9 (??)
    En fait la définition serait plutôt : raccourci d'une classe correspondant à UN caractère alphanumérique (underscore compris) _a-zA-Z0-9

    On aurait tout aussi bien pu écrire (pour le cas de départ (var=n022.car") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.\([0-9]*\).*/\1/'
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/[[:alpha:]]*\([0-9]*\).*/\1/'

    Si je teste la commande sed NON PAS avec var="n022.car", mais avec var="nnnn022.car", ca ne marche pas; j'en déduis que je n'ai pas compris ce que représentait \w

    puis je avoir une explication ?
    Voir ci-dessus.
    La solution qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/[[:alpha:]]*\([0-9]*\).*/\1/'
    et pourrais je savoir POUR BASH où est ce qu'on peut trouver le tableau et la signification de ces raccourcis (s'il s'agit bien d'un raccourci). Dans l'abs-guide, je ne l'ai pas trouvé ????
    Substitution de paramètres

Discussions similaires

  1. [SH] Extraction sous-chaine (encore ;-) )
    Par alx13 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 28/09/2011, 21h46
  2. extraction sous chaines -> Excel
    Par rienDeComplique dans le forum VBA Word
    Réponses: 6
    Dernier message: 03/09/2009, 17h50
  3. Extraction sous chaine regexp
    Par photorelief dans le forum Langage
    Réponses: 1
    Dernier message: 23/05/2009, 20h07
  4. extraction sous chaine
    Par ouinih dans le forum Langage
    Réponses: 6
    Dernier message: 28/01/2009, 11h49

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