Logo du forum
 

Forum TT-Hardware

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [Shell] » Remplacement d'une chaine
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Remplacement d'une chaine
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.2 par jour)


Score :

Message du 23-09-2008 @ 20:04      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonsoir,

J'essaye en vain de remplacer une chaine de caractère par la valeur d'une variable avec 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é le 23-09-2008 @ 20:04 Par zorgh]
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -
Paddy
Vétéran
Membre # 8375

 Avatar du membre
Lieu : Strasbourg

Messages :
8450 (1.94 par jour)


Score :

Message du 24-09-2008 @ 1:45   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Que donne $i dans la boucle for ? le nom suffixé ?
Si c'est bien ça je proposerai bien qqch de ce genre :

Code :


do
j = echo $i | sed 's/.conf//'
sed 's/toto/$j/g' <$i >$i
done



Rien de certain par contre, ça fait longtemps que j'ai pas fait de sh et je peux pas tester là :p
Enfin en gros tu récupère le nom de fichier sans suffixe dans j (première ligne), puis tu remplace toto par ce nom (deuxième ligne)
----------
Masterdiablo /// PS3 - Wii U - iPhone 5 64Gio - iPhone 4 32Gio (pour Madame)
PC : Core i7 3770 - Asus P8Z77-V PRO - 8Gb GSkill Extreme3 - Asus HD7870 2Gb - Crucial M4 128Go - Caviar Black 1To - Antec Sonata IV
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Gio DDR2 667Mhz - Geforce G9500 M GS - HD 250Gio
- Haut de page -
Paddy
Vétéran
Membre # 8375

 Avatar du membre
Lieu : Strasbourg

Messages :
8450 (1.94 par jour)


Score :

Message du 30-09-2008 @ 15:17   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

As tu trouvé la solution par simple curiosité intellectuelle ?
----------
Masterdiablo /// PS3 - Wii U - iPhone 5 64Gio - iPhone 4 32Gio (pour Madame)
PC : Core i7 3770 - Asus P8Z77-V PRO - 8Gb GSkill Extreme3 - Asus HD7870 2Gb - Crucial M4 128Go - Caviar Black 1To - Antec Sonata IV
Portable : Asus M51Sn-AS023C ** 15"4 - T9300 - 3 Gio DDR2 667Mhz - Geforce G9500 M GS - HD 250Gio
- Haut de page -
zorgh
Master
Membre # 7668

 Avatar du membre
Lieu : FRANCE

Messages :
869 (0.2 par jour)


Score :

Message du 30-09-2008 @ 16:04   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Désolé, Paddy, je n'avais pas vu le message posté.

J'ai résolu le problème avec le script suivant :

Code :


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



J'avais des / dans les fichiers parcourus
----------
Toshiba M30X-125 Intel Centrino PM 1,7 Ghz - 1 Go DDR - DD 60 Go - 15,4"W TFT - Ati Radeon 9700
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 3.092 secondes