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

Linux Discussion :

Unix et Sed: récupérer une partie d'une chaine


Sujet :

Linux

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut Unix et Sed: récupérer une partie d'une chaine
    Bonjour,

    J'ai la chaîne suivante: "truc={bidule} machin={blabla.9399}"
    Si je lance la commande suivante :

    echo "truc={bidule} machin={blabla.9399}" | sed "s/truc={\(.*\)}.*/\1/"

    J'obtiens le résultat suivant :

    bidule} machin={blabla.9399

    En gros il cherche le plus long pattern répondant à la requête... Est-il possible de lui dire de s'arrêter au premier pattern rencontré? En gros il faudrait que cela me donne juste "bidule".

    Merci par avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Il faut un espace entre } et .*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "truc={bidule} machin={blabla.9399}" | sed -e "s/truc={\(.*\)} .*/\1/"
    bidule

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    Merci pour ta réponse Mygale1978. J'ai un petit problème cependant en essayant ta proposition :

    echo "truc={bidule} chouette={hiboux} machin={blabla.9399} " | sed -e "s/chouette={\(.*\)} .*/\1/"

    donne :

    truc={bidule} hiboux} machin={blabla.9399

    Je ne comprends plus rien... Quelqu'un peut-il m'aider ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui

    car tu as un deuxième espace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [sshuser@be-prod Test-Simple-0.80]$ echo "truc={bidule} machin={blabla.9399} coucou={tetscoucuo}" | sed -e "s/truc={\(.*\)} .* .*/\1/g"
    bidule

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    Le problème, c'est que je ne connais pas à l'avance le nombre de clef/valeur. Je ne peux donc pas ajouter de [espace].* de manière dynamique...

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par falcon Voir le message
    Le problème, c'est que je ne connais pas à l'avance le nombre de clef/valeur. Je ne peux donc pas ajouter de [espace].* de manière dynamique...
    Ben faut passer par un outil plus puissant style awk.

    Bon, je tape ça vite fait car je peux pas tester mais ça me semble pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "truc={bidule} machin={blabla.9399}" | awk -vkey=truc '{for (i=1; i <= NF; i++) if (strncmp($i, key, strlen(key)) == 0) print $i}'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [Débutant] Récupérer les coordonnées d'une partie d'une figure
    Par LeTube dans le forum MATLAB
    Réponses: 0
    Dernier message: 04/06/2014, 13h41
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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