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 :

Modifier la valeur d'une variable à partir d'un mot clé


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut Modifier la valeur d'une variable à partir d'un mot clé
    Bonjour

    suite à ma question précédente (résolue dans l'exemple proposé) :

    Voila un exemple de fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    smf:
        gtpc:
          - addr:
            - 127.0.0.4
            - ::1
     
    sgsn:
      - gtpc:
          addr:
            - 127.0.0.3
        default_route: true
    Je souhaite un script pour remplacer addr du smf en une autre valeur1 et l'addr du sgsn doit etre remplacée par une autre valeur2.

    Le résultat attendu est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    smf:
        gtpc:
          - addr:
            - 10.10.0.4
            - ::1
     
    sgsn:
      - gtpc:
          addr:
            - 10.10.0.7
        default_route: true
    La fonction sed proposée dans ma précédente question répondait au problème car je cherchais une chaine de caractères et je remplaçais toute la chaine.

    Avec le retour charriot, je ne vois pas comment faire.

    Merci

  2. #2
    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
    Je souhaite un script
    tu veux dire que tu souhaites faire, parce qu'ici on ne fait pas à la place des autres.
    donc, avant qu'on te propose une solution, montre-nous ce que tu as déjà fait.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    À ta place, j'utiliserais une machine d'états dans awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{if (etat%10==1) print var;etat=0;next;} /smf/{var="pouetsmz";etat=10;} /sgsn/{var="pouetsgsn"; etat=20;} /addr/{etat++;} 1'

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    À ta place, j'utiliserais une machine d'états dans awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{if (etat%10==1) print var;etat=0;next;} /smf/{var="pouetsmz";etat=10;} /sgsn/{var="pouetsgsn"; etat=20;} /addr/{etat++;} 1'
    Merci Floderalab, je vais regarder je ne connais pas la commande awk je vais apprendre.

    Cordialement

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    Bonjour Flodelarab

    après avoir étudié la commande awk, je vais maintenant voir comment écrire mon script à partir de la recherche de pattern "ma chaine de caractère" et aller à la ligne suivante (NR+1 ?) pour modifier la valeur de l'adresse IP (sub?)

    Ton script fonctionne mais je ne le comprends pas :-(

    (Le résultat de ton script)
    smf:
    gtpc:
    - addr:
    pouetsmz
    - ::1

    sgsn:
    - gtpc:
    addr:
    pouetsgsn
    default_route: true


    Merci pour ton aide.

    Cordialement

    Frédéric

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    On commence, toutes les variables sont à zéro. Donc etat est à 0.
    Si on rencontre une ligne qui contient smf, etat=10 et on charge "var".
    Si on rencontre une ligne qui contient sgsn, etat=20 et on charge "var".
    Si on rencontre une ligne qui contient addr, on incrémente etat. etat vaut soit 11 soit 21.
    Si on rencontre une ligne qui contient une IP, si etat vaut 11 ou 21, on décharge "var" dans l'affichage, et on remet tout à 0 (etat et var). Et on passe immédiatement à la ligne suivante.

    Le script termine par "1". C'est essentiel. Quand faire l'action ? Quand 1 est vrai. Mais 1 est toujours vrai. Donc l'action est faite pour chaque ligne. Quelle est l'action ? Il n'y en a pas. Donc c'est l'action par défaut. Quelle est l'action par défaut ? L'affichage. Donc "1" en fin de script écrit toutes les lignes d'entrée en sortie. Sauf, ici, les lignes qu'on a remplacées, et pour lesquelles on a court-circuité la fin du script.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    tu veux dire que tu souhaites faire, parce qu'ici on ne fait pas à la place des autres.
    donc, avant qu'on te propose une solution, montre-nous ce que tu as déjà fait.
    Pardon, je souhaite faire, j'ai besoin d'aide car je ne suis pas développeur et ce que j'ai fait c'est de suivre les tutoriels suivants :

    https://www.ionos.fr/digitalguide/se...-sed-de-linux/
    et la chaine youtube :



    je n'ai pas encore regardé le 3ème chapitre.

    Mon objectif est d'alimenter mon blog qui explique comment fonctionne la 4G/5G, c'est un blog qui aide la communauté à comprendre les réseaux de mobiles (tu pourras vérifier mon investissement).

    Ceci étant dit, j'ai été maladroit dans ma demande, mais je ne voulais pas vous manquer de respect.

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

Discussions similaires

  1. Modifier la valeur d'une variable à partir du pom
    Par virtuoAMGA dans le forum Maven
    Réponses: 2
    Dernier message: 03/07/2012, 13h40
  2. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  3. Récuperer la valeur d'une variable à partir de son nom
    Par Etanne dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2007, 18h04
  4. Comment modifier la valeur d'une variable Mysql.
    Par pcsystemd dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 19/09/2007, 08h22
  5. Réponses: 1
    Dernier message: 12/07/2007, 08h16

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