Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2007, 18h04   #1
Membre du Club
 
Avatar de java_fun
 
Inscription : novembre 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 117
Points : 66
Points : 66
Envoyer un message via MSN à java_fun
Par défaut Remplacer une chaîne dans un fichier txt

,

j ai un fichier text sous le format suivant :

Code :
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 :
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
__________________
Java fun is back
java_fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 18h30   #2
Membre actif
 
Avatar de Fango
 
Inscription : décembre 2005
Messages : 197
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 197
Points : 178
Points : 178
je vais peut etre dire une grosse ********, mais $ ca indique pas la fin d'une ligne du coup?
Fango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 21h54   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 :
1
2
3
forum=developpez
login=javafun
Code :
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
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 11h04   #4
Membre du Club
 
Avatar de java_fun
 
Inscription : novembre 2004
Messages : 117
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 117
Points : 66
Points : 66
Envoyer un message via MSN à java_fun


Merci BlaireauOne pour ta réponse effectivement la solution est de :
Citation:
# 1) Remplacer les simple-quotes par des double-quotes (sinon les variables ne sont pas substituées)
# 2) Il manque un '/'
par contre
Citation:
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 :
 sed -i "s/$var=.*/$var=$value/" $test_conf_file
Cordialement
__________________
Java fun is back
java_fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 19h57   #5
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 :
 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 :
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 :
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 
}
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h38.


 
 
 
 
Partenaires

Hébergement Web