Remplacer une chaine de caractère avec sed.

Remplacer une chaine de caractère avec sed. - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 23-09-2008 à 20:05:40    

Bonsoir,
 
J'essaye en vain de remplacer une chaine de caractère par la valeur d'une variable en utilisant sed.
 
Je boucle sur plusieurs fichiers de config et ensuite je voudrais remplacer le mot toto apparaissant dans ces fichiers de config par le nom du fichier.
 
#!/bin/sh
for i in /tmp/*.conf;
do
sed ...
done
 
Par exemple, si je boucle sur le fichier test.conf, j'aimerais que toto soit remplacer par test.
 
Merci pour votre aide.


Message édité par sneakz le 23-09-2008 à 20:06:00
Reply

Marsh Posté le 23-09-2008 à 20:05:40   

Reply

Marsh Posté le 23-09-2008 à 20:12:40    

Et qu'est ce qu'il y a de compliqué ?
C'est une substitution simple de sed. As tu pris le temps de lire le manpage (man sed)  et de faire quelque tests sans boucle for afin de comprendre le fonctionnement de sed ?

 

Au pire consulte la page : http://fr.wikipedia.org/wiki/Sed_(informatique)
C'est écrit texto dedans

Spoiler :

ce n'est pas t'aider mais :
sed -i s/toto/$i/g /tmp/$i.conf
essaye un minimum de faire des tests et de lire les manpages quand même :/

 


Message édité par o'gure le 23-09-2008 à 20:16:15

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:17:01    

La gestion de la variable sous sed ne fonctionne pas.
 
J'ai parcouru le web de long en large et je n'ai pas trouvé de cas de figure utilisant une variable comme substitution.
 
cat $i | sed 's/toto/'titi'/g';  --> fonctionne mais je ne sais pas comment intégrer ma variable.  
 

Reply

Marsh Posté le 23-09-2008 à 20:20:25    

Je n'ai pas dû comprendre ta problématique :heink:


> echo toto > test.conf
> cat test.conf
toto
> i=test ; sed -i s/toto/$i/g $i.conf
> cat test.conf
test
>


Message édité par o'gure le 23-09-2008 à 20:22:33

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:25:37    

J'avais bien essayé cela :

Code :
  1. #!/bin/sh
  2. for i in /tmp/*.conf;
  3. do
  4. sed -i s/toto/$i/g $i;
  5. done


 
mais cela me retourne cette erreur  à chaque passage dans la boucle :
 
sed: -e expression n°1, caractère 9: option inconnue pour `s'

Reply

Marsh Posté le 23-09-2008 à 20:31:59    

le $i vaudra test.conf quand tu l'appelle dans ta substitution, donc c'est sûr, tu n'obtiendras pas ce que tu attends.


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:34:54    

Oui, toto sera remplacé par test.conf si cela fonctionne. Ce n'est pour le moment par important. Or cela ne fonctionne pas.

Reply

Marsh Posté le 23-09-2008 à 20:39:38    

> rm test.conf          
rm: détruire fichier régulier `test.conf'? y
> echo toto > test.conf
> cat script.sh
#!/bin/sh
for i in *.conf
do
    sed -i s/toto/`echo $i | cut -f1 -d'.'`/g $i
done
> cat test.conf
toto
> ./script.sh
> cat test.conf  
test
>



---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:41:20    

Et sans le cut ca fonctionne très bien aussi [:spamafote]

> rm test.conf          
rm: détruire fichier régulier `test.conf'? y    
> echo toto > test.conf
> cat test.conf  
toto
> cat script.sh
#!/bin/sh
for i in *.conf
do
    sed -i s/toto/$i/g $i
done
> ./script.sh
> cat test.conf  
test.conf


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:42:25    

Ils ont quels nom précisément test fichiers dans /tmp ?


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:42:25   

Reply

Marsh Posté le 23-09-2008 à 20:46:44    

J'ai des fichiers de config : aa.vonf, bb.conf, cc.conf.
Ils ont tous le même contenu. Je veux juste changer le mot toto contenu sur la première ligne.
 
Ma première ligne :
 
LogFile        /var/log/toto


Message édité par sneakz le 23-09-2008 à 20:48:37
Reply

Marsh Posté le 23-09-2008 à 20:48:39    

Je viens d'essayer ton script (copier/coller) ca fonctionne aussi [:spamafote]


Message édité par o'gure le 23-09-2008 à 20:48:52

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:50:08    

Ah, je suis con, c'est les / [:whatde]


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 20:53:01    

Comment dois-je les traiter ?

Reply

Marsh Posté le 23-09-2008 à 20:54:38    

sneakz a écrit :

Comment dois-je les traiter ?

En les  remplacant dans sed par autre chose

#!/bin/sh
for i in /tmp/*.conf
do
    sed -i s+toto+`basename $i|cut -f1 -d.`+g $i
done


Message édité par o'gure le 23-09-2008 à 20:55:40

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 21:00:39    

Tu es trop fort !! un grand merci.
 
As-tu un lien, une doc à me suggerer où je pourrai apprendre à utiliser sed ?

Reply

Marsh Posté le 23-09-2008 à 21:03:27    

J'ai ces deux liens, en anglais :
http://sed.sourceforge.net/
http://www.grymoire.com/Unix/Sed.


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 23-09-2008 à 21:09:03    

Merci bien.

Reply

Marsh Posté le 24-09-2008 à 12:39:38    

Pourquoi utiliser sed pour modifier un fichier, alors que ed est fait pour ça ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed