Rechercher : dans
Par :

Aide fonction sed sous linux (encore un )

Dernière réponse le 9 sep 2008 à 23:21:33 rhum, le 8 sep 2008 à 22:16:00 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « aide fonction sed sous linux (encore un ) » dans :
[Linux] Débuter sous Linux VoirDÉBUTER SOUS LINUX Qu'est-ce que Linux ? Si vous venez de Windows I - LES LIVE-CDS I-1 Quelles distributions choisir ? I-2 Utilisation II - INSTALLER LINUX II-1 Partitionner son disque dur II-2 Multiboot Windows/Linux II-3 Quelles...
Sed - Substitution VoirSubstitution Substitution basique Simple Globale Ciblée Substitution conditionnée Simplee Avancée Bloc Avancéé Substitution basique Simple - 1ère occurrence (de chaque ligne) rencontrée uniquement sed 's/la/LA/' fichier.txt
Partager un scanner unix* en réseau VoirCa y est,vous avez fait l'achat d'un magnifique scanner et vous avez réussi à le faire fonctionner sous Linux.(ce n'est pas le propos ici :( Vous disposez par ailleurs de poste(s) Windows dans votre réseau local. Savez vous qu'il est possible de...
Télécharger Wine VoirWine est un logiciel capable d'émuler un environnement et d'exécuter des applications Windows sur Linux et les autres systèmes d'exploitation compatibles POSIX. Les programmes Windows fonctionnent sur linux avec Wine en natif et agissent comme les...
Linux - L'installation de logiciels VoirLes différents types d'archives Basiquement il existe plusieurs façons de récupérer une application fonctionnant sous Linux : Sous forme de paquetage RPM. Il s'agit d'un fichier portant l'extension .rpm permettant une installation automatique,...
MySQL - Installation sous Windows VoirPrésentation de MySQL MySQL est un Système de Gestion de Bases de Données (SGBD) fonctionnant sous Linux et Windows. Depuis la version 3.23.19, MySQL est sous Licence GPL (aussi bien sous Linux que Windows), ce qui signifie qu'il peut être utilisé...
Introduction à la mise en place d'un Intranet VoirStatut de ce document Ce document expliquant comment mettre en place un intranet sous une machine fonctionnant avec Linux a été réalisé en partenariat avec www.tldp.org/, dont le webmaster (Michel Maudet) est l'auteur du document original...

1

jipicy, le 8 sep 2008 à 22:31:13

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.

Répondre à jipicy

2

rhum, le 9 sep 2008 à 04:56:46

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

Répondre à rhum

3

rhum, le 9 sep 2008 à 22:22:41

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"

Répondre à rhum

4

jipicy, le 9 sep 2008 à 22:54:08
  • +1

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.

Répondre à jipicy

5

 rhum, le 9 sep 2008 à 23:21:33

ç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

Répondre à rhum
Collection CommentÇaMarche.net