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 :

Remplacer une chaîne dans un fichier txt


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de java_fun
    Inscrit en
    Novembre 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 117
    Points : 102
    Points
    102
    Par défaut Remplacer une chaîne dans un fichier txt
    ,

    j ai un fichier text sous le format suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    forum=developpez
    login=javafun
    et j ai crée un script qui vas lire ce fichier et remplacer la valeur de la variable passer comme paramètre

    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
     
    .....
    test_conf_file=chemin_vers_mon_fichier
    function SetConfigFile(){
    # la variable à changer
    var=$1 
    # la valeur
    value=$2 
    cat $test_conf_file | while read line 
     do
    # récup la variable de la ligne  courante
     var_conf=`echo "$line" | cut -d "=" "-f1"` 
     if [ $var == $var_conf ]
        then
         # remplacé la valeur par cette passer en  param
         sed 's/($var=*)/$var=$value' $test_conf_file 
      fi
     done
    }
    ................
    mais ca ne marche pas , vous avez une idée sur la nature de l'expression régulière à mettre

    Cordialement

  2. #2
    Membre actif Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Points : 205
    Points
    205
    Par défaut
    je vais peut etre dire une grosse ********, mais $ ca indique pas la fin d'une ligne du coup?

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par java_fun

    [CODE
    if [ $var == $var_conf ]
    then
    # remplacé la valeur par cette passer en param
    sed 's/($var=*)/$var=$value' $test_conf_file
    fi
    done
    [/CODE]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    forum=developpez
    login=javafun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if [ $var == $var_conf ] ;  then
         # sed 's/($var=*)/$var=$value' $test_conf_file 
         # 1) Remplacer les simple-quotes par des double-quotes (sinon les variables ne sont pas substituées)
         # 2) Il manque un '/'
         # 3) On ne veut que mettre à jour la "$value" (.* signifie 1 caractère quelconque 0 à n fois)
         sed "s/=.*/=$value/" $test_conf_file 
      fi

  4. #4
    Membre régulier Avatar de java_fun
    Inscrit en
    Novembre 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 117
    Points : 102
    Points
    102
    Par défaut


    Merci BlaireauOne pour ta réponse effectivement la solution est de :
    # 1) Remplacer les simple-quotes par des double-quotes (sinon les variables ne sont pas substituées)
    # 2) Il manque un '/'
    par contre
    sed "s/=.*/=$value/" $test_conf_file
    vas remplacer tous les valeurs de mon fichier de conf alors que je souhaite changer que la valeur d'une variable passer comme paramètre ce qui donne cette expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed -i "s/$var=.*/$var=$value/" $test_conf_file
    Cordialement

  5. #5
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par java_fun


    Merci BlaireauOne pour ta réponse effectivement la solution est de :

    par contre vas remplacer tous les valeurs de mon fichier de conf alors que je souhaite changer que la valeur d'une variable passer comme paramètre ce qui donne cette expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed -i "s/$var=.*/$var=$value/" $test_conf_file
    Cordialement

    Effectivement, l'itération ligne par ligne et le sed global du fichier m'ont perturbé

    Autre possibilité, remplacer :

    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
     
    .....
    test_conf_file=chemin_vers_mon_fichier
    function SetConfigFile(){
    var=$1 # la variable à changer
    value=$2 # la valeur
    cat $test_conf_file | while read line 
     do
    # récup la variable de la ligne  courante
     var_conf=`echo "$line" | cut -d "=" "-f1"` 
     if [ $var == $var_conf ]
        then
         # remplacé la valeur par cette passer en  param
         sed 's/($var=*)/$var=$value' $test_conf_file 
      fi
     done
    }
    ................
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function SetConfigFile()
    {
    var=$1 # la variable à changer
    value=$2 # la valeur
    #-- sélectionne la ligne commençant ( ^ ) par $var et applique la substitution.
    sed -i "/^$var/s/=.*/=$value/" $test_conf_file 
    }

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

Discussions similaires

  1. Commande pour remplacer une ligne dans un fichier.txt
    Par ludobspp dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 07/11/2013, 09h19
  2. [Batch] Remplacer une ligne par une autre dans un fichier txt
    Par tinwul dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 03/07/2009, 14h58
  3. Remplacer une chaîne dans un fichier
    Par Christophe Genolini dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/08/2008, 21h03
  4. remplacer une chaîne dans un fichier
    Par PH_DEMS dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/06/2008, 21h49
  5. [RegEx] Recherche et Remplacement d'une chaîne dans un fichier
    Par jpascal dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2007, 20h35

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