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 :

Récupérer la valeur d'une chaîne de caractère sauf le dernier morceau séparé par un /


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut Récupérer la valeur d'une chaîne de caractère sauf le dernier morceau séparé par un /
    Bonjour,

    J'essai de découper une chaîne de caractère de la façon suivante :

    ma_ligne=/home/luffyyfful/mon_fichier

    En fait j'aimerai récupérer le résultat suivant :

    et donc zapper "/mon_fichier"

    J'avais comme idée d'utiliser "cut" mais j'ai peur d'être limité, avec la commande suivante, je peux juste afficher/récupérer le champs n ou n, etc. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -d/ -f1 $mon_fichier_contenant_mes_lignes
    Mon problème c'est que mes lignes dans mon fichier, n'ont pas le même nombre de champs délimités par un "/".

    En gros je cherche à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -d/ -ftoute_la_ligne - /le_dernier_champ_apres_le_/
    Avez-vous une idée ?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par LuffyyffuL Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_ligne=/home/luffyyfful/mon_fichier
    En fait j'aimerai récupérer le résultat suivant :

    Il existe une commande nommée dirname qui retourne le nom du répertoire contenant un fichier (en fait, la commande marche aussi si la chaîne passée ne correspond à rien de concret):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ma_ligne=/home/luffyyfful/mon_fichier
    $ dirname "${ma_ligne}"
    /home/luffyyfful
    $ basename "${ma_ligne}"
    mon_fichier
    Mais on peut aussi utiliser la puissance du shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo "${ma_ligne%/*}"
    /home/luffyyfful
     
    $ echo "${ma_ligne##*/}"
    mon_fichier

    et donc zapper "/mon_fichier"
    C'est pas cut qu'il faut utiliser, mais plutôt sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's|/[^/]*$||' fichier > fichier-modifié
    Si tu es content du résultat et que tu veux irrémédiablement modifier le contenu du fichier lui-même, il faudra jouer avec l'option -i qui est destructrice!

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Bonjour,

    Peut-être qu'un simple (pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
     dirname "$ligne"
    done <fichier
    te suffirai...

    Trop tard

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

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

    en shell POSIX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${ma_ligne%/*}"
    /home/luffyyfful
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut
    Merci beaucoup pour vos réponses, je vais utiliser la méthode shell, mais je garde en tête les commandes dirname et basename

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

Discussions similaires

  1. Récupérer une chaîne de caractères derrière le dernier anti-slash \
    Par Christophe.G dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 09/11/2014, 14h35
  2. Recherche de valeurs dans une chaîne de caractères
    Par julieng31 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/08/2009, 15h43
  3. Réponses: 4
    Dernier message: 17/07/2008, 16h15
  4. [RegEx] Récupérer un prix dans une chaîne de caractère
    Par Tazerty dans le forum Langage
    Réponses: 1
    Dernier message: 11/03/2008, 07h41
  5. Récupérer un nombre dans une chaîne de caractères
    Par yougoudai dans le forum Général Python
    Réponses: 9
    Dernier message: 23/09/2007, 21h01

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