|
|
|
|
Bonjour,
j'ai un petit probleme pour utiliser la fonction sed sous linux
objectif :
automatiser la modification les parametre d'un fichier de configuration
dans un script en clair dans un fichier config.txt je cherche madifier une ligne existante
ligne d'origine :
tm_execsetting name_on_plugin_load "nom avant modification"
ligne finale :
tm_execsetting name_on_plugin_load "nom que j ai choisi"
sachant que mon script ne connais pas le "nom avant modification"
je procede ainsi:
CHG=`grep "tm_execsetting name_on_plugin_load" config.txt`
sed -e 's/${CHG}/"tm_execsetting name_on_plugin_load \"le nom que j ai choisi\"/g' "config.txt" > "config.tmp"
mv -f config.tmp config.txt
je pense que mon probleme viens du fait que la partie de la ligne que je ne connais aps contient des "
j'ai tenté toute sorte de syntaxe au dans le meilleur des cas cela ne modifie rien dans le fichier et dans le pire des cas me modifie toutes les lignes ou il y a tm_execsetting
soit 1/3 des ligne du fichier de config
ça fais quelques heures que je cours apres la solution mais je suis plus un bidouilleur qu'un pro de la programmation donc je lance mon appel au secours.
Configuration: Linux Firefox 2.0.0.16
Salut, [tmpfs]$ cat le_fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_ "nom avant modification" [tmpfs]$ sed 's/\(tm_execsetting name_on_plugin_load \).*/\1"nom que j ai choisi"/' le_fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom que j ai choisi" tm_execsetting name_on_plugin_ "nom avant modification"Si tu veux que le changement soit effectif, utilise l'option "-i" de sed, modification en place, et avec "-i.bak" tu obtiens même une sauvegarde du fichier original... [tmpfs]$ cat le_fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_ "nom avant modification" [tmpfs]$ sed -i.bak 's/\(tm_execsetting name_on_plugin_load \).*/\1"nom que j ai choisi"/' le_fich [tmpfs]$ cat le_fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom que j ai choisi" tm_execsetting name_on_plugin_ "nom avant modification" [tmpfs]$Voir dans la FAQ les pages consacrées à SED ;-)) $ man woman Il n'y a pas de page de manuel pour woman. |
En fait l'expression (tm_execsetting name_on _plugin_load).* veut dire que je garde tout ce qui est en tre parenthese et que je le replace le reste * par le contenu de l'autre slash ??
|
Désolé pour le double post mais il c'est ecoulé quelques heures
|
Il faut entourer l'expression par des quotes doubles pour que la variable soit interprétée : [tmpfs]$ cat fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_ "nom avant modification" [tmpfs]$ nom="nom que j'ai choisi" [tmpfs]$ echo $nom nom que j'ai choisi [tmpfs]$ sed "/tm_execsetting name_on_plugin_load/ s/nom avant modification/$nom/" fich tm_setting name_on_plugin_load "nom avant modification" tm_execsetting name_on_plugin_load "nom que j'ai choisi" tm_execsetting name_on_plugin_ "nom avant modification" [tmpfs]$Voir : http://www.commentcamarche.net/faq/sujet 9559 sed introduction a sed part ii#le remplacement de variables ;-)) $ man woman Il n'y a pas de page de manuel pour woman. |
ça y es cette fois j'ai reussi
|