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 :

Extraire une valeur d'une ligne avec sed


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut Extraire une valeur d'une ligne avec sed
    Salut,
    j'aimerais extraire une valeur qui se trouve dans une ligne de texte avec un sed.

    je m'explique: supposons une ligne texte donnée en entrée à sed:

    foo=0, bar=5, baz=8, gux=4, guux=40

    j'aimerais extraire la valeur de baz (ie. 8 ) et le balancer vers l'output standard...

    une idée quelqu'un?

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "foo=0, bar=5, baz=8, gux=4, guux=40" | cut -d, -f3 | cut -d= -f2
    8

    pas de sed, désolé
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    oui bon mon exemple est un peu réducteur...

    la seule chose que je sais c'est que j'ai un texte, que quelque part dans ce texte j'ai la chaîne
    • ,baz=8,
    et que je sais qu'il n'y a qu'une seule occurence

    je ne vois pas vraiment comment résoudre ça avec un cut ou avec un sed

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    J'avoue ne pas avoir d'idée. En langage C, ça serait facile, mais c'est un peu sortir l'artillerie lourde pour cueillir une paquerette.

    Je te conseille d'aller faire un tour du coté du forum perl.
    Ils sauront, eux.
    l'utilisateur 2eurocent saura probablement.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Bah, en fait je voulais faire ça dans le cadre d'un programme en C, donc l'artillerie étant déjà déployée, je peux y aller...

    merci quand-même pour ton aide ;-)

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    béh en langage c, c'est relativement facile ... strstr, strtok, ... La manipulation classique de string.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    J'ai trouvé une solution avec une combinaison de sed et de cut et une amie m'a montré comment le faire en perl, voici donc les deux scripts

    principe avec ksh: on remplace toutes les occurences du caractère spécial '@' par un '_' puis on remplace "baz=" par '@'
    On sait donc avec certitude que la valeur qu'on cherche se trouve entre la première occurence de '@' et la première occurence de ',' qui suit le '@'. Il ne reste plus qu'a appliquer le cut et on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $montexte | sed "s/@/_/g" | sed "s/baz=/@/g" | cut -d'@' -f2 | cut -d',' -f1
    en perl c'est carément tout con:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $line =~ m/baz=(\d*),/;
    print "$1\n";
    voilààààààà merci à ggnore pour m'avoir mis sur la voie du cut et de perl ;-)

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

Discussions similaires

  1. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  2. Réponses: 0
    Dernier message: 15/02/2011, 16h01
  3. Remplacer une chaine sur 2 lignes avec sed
    Par uskiki85 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 15/04/2010, 19h03
  4. Réponses: 1
    Dernier message: 11/03/2010, 14h47
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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