Aide fonction sed sous linux (encore un )
Résolu
rhum
-
rhum -
rhum -
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.
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.
A voir également:
- Aide fonction sed sous linux (encore un )
- Fonction si et - Guide
- Linux reader - Télécharger - Stockage
- Toutou linux - Télécharger - Systèmes d'exploitation
- R-linux - Télécharger - Sauvegarde
- Backtrack linux - Télécharger - Sécurité
5 réponses
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
;-))
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 ;-))
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 ??
g pas trop saisi pourquoi vous avze mis de /\ mais ça je vais reprends le tuto a fond pour bien saisir
jevais bosser et ce soir je met en palce ma fonction vous etes super :)
merci beaucoup
g pas trop saisi pourquoi vous avze mis de /\ mais ça je vais reprends le tuto a fond pour bien saisir
jevais bosser et ce soir je met en palce ma fonction vous etes super :)
merci beaucoup
désolé pour le double post mais il c'est ecoulé quelques heures
et
g encore un probleme
car le script que je veux creer change "nom avant modofication" par "nom que j'ai choisi" or nom que g choisi est une variable
ainsi je demare mon script comme ceci ./monscript "nom que j'ai choisi"
et au debut de mon script je declare ma variable avec :
[code]
#/bin/bash
nom=$1
sed -i.bak 's/\(tm_execsetting name_on_plugin_load \).*/\1\"$nom\"/' le_fich
[/code]
rhum@bureau$ ./monscript "nom que j'ai choisi"
rhum@bureau$ cat le_fich
tm_setting name_on_plugin_load "nom avant modification"
tm_execsetting name_on_plugin_load "$nom"
tm_execsetting name_on_plugin_ "nom avant modification"
et
g encore un probleme
car le script que je veux creer change "nom avant modofication" par "nom que j'ai choisi" or nom que g choisi est une variable
ainsi je demare mon script comme ceci ./monscript "nom que j'ai choisi"
et au debut de mon script je declare ma variable avec :
[code]
#/bin/bash
nom=$1
sed -i.bak 's/\(tm_execsetting name_on_plugin_load \).*/\1\"$nom\"/' le_fich
[/code]
rhum@bureau$ ./monscript "nom que j'ai choisi"
rhum@bureau$ cat le_fich
tm_setting name_on_plugin_load "nom avant modification"
tm_execsetting name_on_plugin_load "$nom"
tm_execsetting name_on_plugin_ "nom avant modification"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ça y es cette fois j'ai reussi
en plus en suivant le lien en bas de ton post g compris comment integrer la variable de maniere plus generale
je doit avouer que j'avais lu en diagonale et que g pas fais gaffe que yavais tout un paragraphe dedié a l'introduction de variable dans la commande (:honte)
par contre pour que ça fonctionne g utilisé la l'expression de ta reponse d'hier soir
\(tm_execsetting name_on_plugin_load \).*
enfin merci beaucoup vraiment la maintenant ça fonctionne nikel
en plus en suivant le lien en bas de ton post g compris comment integrer la variable de maniere plus generale
je doit avouer que j'avais lu en diagonale et que g pas fais gaffe que yavais tout un paragraphe dedié a l'introduction de variable dans la commande (:honte)
par contre pour que ça fonctionne g utilisé la l'expression de ta reponse d'hier soir
\(tm_execsetting name_on_plugin_load \).*
enfin merci beaucoup vraiment la maintenant ça fonctionne nikel