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 :

Modifier une ligne d'un fichier


Sujet :

Linux

  1. #1
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut Modifier une ligne d'un fichier
    salut
    je suis en train de m'embrouiller alors je demande de l'aide...
    le but du jeu est de proposer à l'utilisateur de choisir son serveur...
    pour cela, je dois modifier le fichier /etc/hosts qui est formaté comme ça:
    @IP nom alias

    en fait, il faut que je trouve la ligne ou alias vaut svrrx300,
    je retiens le nom associé, il s'agit du serveur courant

    je cherche tous les noms qui ont #svrrx300 comme alias,
    ce sont les serveurs potentiels

    je propose ces noms à l'utilisateur qui doit en choisir un en entrant son nom au clavier

    une fois ce serveur choisi, je vais modifier l'alias correspondant de #svrrx300 à svrrx300

    puis je change le svrrx300 de l'ancien serveur en #svrrx300

    si ce n'est pas très clair tout ça alors n'hésitez pas à poser des questions...

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #!/bin/sh
    #cd /etc
    if [ -f hosts ]; then
      echo "sauvegarde du fichier hosts en hosts.old"
      cp hosts hosts.old
       if [ -f hosts.old ]; then
          echo "fichier .old créé"
          svr_old=`gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
          echo "le serveur actuel est $svr_old"
          echo "les serveurs potentiels sont:"
          gawk -F" "'{if($3 == "#svrrx300") print $2}' hosts
          echo "choisissez parmi ces derniers quel serveur vous désirez utiliser (entrez son nom)"
          read choix_svr
          echo "vous avez choisi le serveur $choix_svr"
          echo "modification en cours..."
          gawk -F" " '{if($2 == $svr_old) sed -e s/svrrx300/\#svrrx300/g}' hosts
          gawk -F" " '{if($2 == $choix_svr) sed -e s/\#svrrx300/svrrx300/g}' hosts
          echo "le nouveau serveur est `gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
        else
           "échec création fichier .old"
        fi
    else
       épas de fichier hosts"
    fi
    en fait tou fonctionne jusqu'au sed...je ne voi pas comment mettre et enlever les # devant les svrrx300...
    quelqu'un a une idée?
    cordialement,
    jula.
    Promis, avant j'ai cherché sur Google!

  2. #2
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    je ne sais pas si c'est bien ça que tu cherche, mais voici un petit script qui remet le '#' là ou il n'y en a pas et qui l'enlève pour le serveru désigné (dans le script srv12) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #! /bin/sed -rf
     
    / ([^#]+)$/{
    	s/ ([^ ]+)$/ #\1/
    }
     
    /srv12/{
    	s/^([1-9.]+ )([^ ]+ )#(.*)$/\1\2\3/
    }
    voici le fichier hosts avec lequel je l'ai testé :
    111.222.333.444 srv1 #svrrx300
    111.222.333.444 srv2 #svrrx300
    111.222.333.444 srv3 #svrrx300
    111.222.333.444 srv4 #svrrx300
    111.222.333.444 srv5 #svrrx300
    111.222.333.444 srv6 #svrrx300
    111.222.333.444 srv7 #svrrx300
    111.222.333.444 srv8 #svrrx300
    111.222.333.444 srv9 svrrx300
    111.222.333.444 srv10 #svrrx300
    111.222.333.444 srv11 #svrrx300
    111.222.333.444 srv12 #svrrx300
    111.222.333.444 srv13 #svrrx300
    et enfin la sortie qu'il fournie :

    :/tmp$ ./sed2.sed hosts
    111.222.333.444 srv1 #svrrx300
    111.222.333.444 srv2 #svrrx300
    111.222.333.444 srv3 #svrrx300
    111.222.333.444 srv4 #svrrx300
    111.222.333.444 srv5 #svrrx300
    111.222.333.444 srv6 #svrrx300
    111.222.333.444 srv7 #svrrx300
    111.222.333.444 srv8 #svrrx300
    111.222.333.444 srv9 #svrrx300
    111.222.333.444 srv10 #svrrx300
    111.222.333.444 srv11 #svrrx300
    111.222.333.444 srv12 svrrx300
    111.222.333.444 srv13 #svrrx300
    J'espère que ça peut t'aider

  3. #3
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    salut narmataru,
    d'abord merci pour ton aide!
    le pb c'est que je ne suis pas douée: je n'arrive pas à faire deux sed avec ton scripts, est-ce que tu peux me donner ça en deux lignes de commandes ?
    et plus, il faudrait que je puisse passer une variable comme primier élément si j'ai bien compris, à la place du svr12 mais si je mets $choix_svr ça ne va pas fonctionner, à cause du $...enfin, je ne trouve pas comment faire!!
    un peu d'aide encore s'il vous plaît.
    cordialement,
    jula.
    Promis, avant j'ai cherché sur Google!

  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    et voilou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/bin/sh
    #cd /etc
    if [ -f hosts ]; then
      echo "sauvegarde du fichier hosts en hosts.old"
      cp hosts hosts.old
       if [ -f hosts.old ]; then
          echo "fichier .old créé"
          svr_old=`gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
          echo "le serveur actuel est $svr_old"
          echo "les serveurs potentiels sont:"
          gawk -F" "'{if($3 == "#svrrx300") print $2}' hosts
          echo "choisissez parmi ces derniers quel serveur vous désirez utiliser (entrez son nom)"
          read choix_svr
          echo "vous avez choisi le serveur $choix_svr"
          echo "modification en cours..."
     
          cat hosts | sed -r -e "
    		/ ([^#]+)$/{
    			s/ ([^ ]+)$/ #\1/
    		}
     
    		/$choix_svr/{
    			s/^([1-9.]+ )([^ ]+ )#(.*)$/\1\2\3/
    		}" > /tmp/hosts.tmp
    	cp /tmp/hosts.tmp hosts
          #echo "le nouveau serveur est `gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
        else
           "échec création fichier .old"
        fi
    else
    	echo "toto"
    fi
    cependant j'ai remarqué que la liste des serveur dispo ne s'affichait pas ...

  5. #5
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    YOUPI!!!
    merci narmataru!!!!
    voilà le script final (j'ai du jouer avec ce que tu m'a donnée par ce que ça ne fonctionnait pas tout à fait, j'ai du me loupé sur un espace ou un truc dans ce genre...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/bin/sh
    #cd /etc
    if [ -f hosts ]; then
      echo "sauvegarde du fichier hosts en hosts.old"
      cp hosts hosts.old
       if [ -f hosts.old ]; then
          echo "fichier .old créé"
          svr_old=`gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
          echo "le serveur actuel est $svr_old"
          echo "les serveurs potentiels sont:"
          gawk -F" "'{if($3 == "#svrrx300") print $2}' hosts
          echo "choisissez parmi ces derniers quel serveur vous désirez utiliser (entrez son nom)"
          read choix_svr
          echo "vous avez choisi le serveur $choix_svr"
          echo "modification en cours..."
          cat hosts | sed -r -e "
         /$srv_old/{
             s/(svrrx300)/#\1/
          }
          /$choix_svr/{
             s/#(svrrx300)$/\1/
          }" > /tmp/hosts.tmp
       cp /tmp/hosts.tmp hosts
          #echo "le nouveau serveur est `gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`"
        else
           "échec création fichier .old"
        fi
    else
       echo "toto"
    fi
    et moi les serveurs potentiels s'affichent bien
    en tout cas encore merci!
    et @bientôt pour de nouvelles aventures.
    jula.
    Promis, avant j'ai cherché sur Google!

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

Discussions similaires

  1. Modifier une ligne d'un fichier XML
    Par murphy dans le forum XML
    Réponses: 1
    Dernier message: 09/09/2008, 11h01
  2. Modifier une ligne d'un fichier en batch
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 17/12/2007, 10h32
  3. Modifier une ligne dans un fichier txt en java
    Par nihad510 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/10/2007, 22h08
  4. Modifier une ligne d'un fichier texte?
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2007, 18h51
  5. Modifier une ligne d'un fichier texte
    Par lauben dans le forum C
    Réponses: 2
    Dernier message: 27/05/2006, 12h45

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