Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1795 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Remplacer une chaine de caractère avec sed.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer une chaine de caractère avec sed.

n°1076264
sneakz
Posté le 23-09-2008 à 20:05:40  profilanswer
 

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
mood
Publicité
Posté le 23-09-2008 à 20:05:40  profilanswer
 

n°1076266
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:12:40  profilanswer
 

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 !
n°1076269
sneakz
Posté le 23-09-2008 à 20:17:01  profilanswer
 

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.  
 

n°1076272
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:20:25  profilanswer
 

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 !
n°1076273
sneakz
Posté le 23-09-2008 à 20:25:37  profilanswer
 

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'

n°1076276
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:31:59  profilanswer
 

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 !
n°1076279
sneakz
Posté le 23-09-2008 à 20:34:54  profilanswer
 

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

n°1076281
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:39:38  profilanswer
 

> 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 !
n°1076283
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:41:20  profilanswer
 

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 !
n°1076285
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:42:25  profilanswer
 

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


---------------
Relax. Take a deep breath !
mood
Publicité
Posté le 23-09-2008 à 20:42:25  profilanswer
 

n°1076288
sneakz
Posté le 23-09-2008 à 20:46:44  profilanswer
 

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
n°1076289
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:48:39  profilanswer
 

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 !
n°1076290
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:50:08  profilanswer
 

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


---------------
Relax. Take a deep breath !
n°1076292
sneakz
Posté le 23-09-2008 à 20:53:01  profilanswer
 

Comment dois-je les traiter ?

n°1076293
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 20:54:38  profilanswer
 

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 !
n°1076296
sneakz
Posté le 23-09-2008 à 21:00:39  profilanswer
 

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

n°1076297
o'gure
Modérateur
Multi grognon de B_L
Posté le 23-09-2008 à 21:03:27  profilanswer
 

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


---------------
Relax. Take a deep breath !
n°1076298
sneakz
Posté le 23-09-2008 à 21:09:03  profilanswer
 

Merci bien.

n°1076424
matafan
Posté le 24-09-2008 à 12:39:38  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Remplacer une chaine de caractère avec sed.

 

Sujets relatifs
Remplacer centre reseau sur Mandriva (Wicd ???)Police de caractère Basque
Remplacer une carte réseau sans utiliser ifrename.sed remplacer un caractère à une postion donnée
[RESOLU] Pb dans une fonction pour retourner une chaine de caracteresLinux: remplacer un retour chariot par un espace (AWK)
[Sed] Remplacer les points par des espaces dans un numéro de téléphone[bash] couper une chaine et comparer chaque élément
remplacer une chaine de caractere sous viRemplacer un caractere par un autre dans une chaine de caracteres
Plus de sujets relatifs à : Remplacer une chaine de caractère avec sed.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR