#1 Le 05/04/2015, à 09:53
- Ric_punk
[résolu] Remplacer du texte dans plusieurs fichiers
Salut à tous
Je recherche à modifier des portions de texte dans différents fichiers se trouvant dans différents répertoires.
Pour le remplacement d'une variable dans différents fichiers, pas de soucis. Voici un exemple
find . -type f -name "*.cfg" -exec sed -i -e "s/System Tools/Outils Systeme/g" {} +
J'ai pas mal de portions de texte à modifier dans pas mal de fichiers, et j'aimerais me servir d'une variable pour ne pas à avoir à indiquer systématiquement le fichier à modifier, étant donné que certaines modifications se feront dans plusieurs fichiers n'étant pas dans le même répertoire. Par contre les fichiers ont la même extension.
J'ai essayé
file=(find . -type f -name "*.cfg")
sed -i -e "s/System Tools/Outils Systeme/g" $file
Je n'ai pas de message de d'erreur mais le texte n'est pas modifié....
Une idée ?
Merci d'avance
Dernière modification par Ric_punk (Le 05/04/2015, à 19:12)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#2 Le 05/04/2015, à 10:21
- nany
Re : [résolu] Remplacer du texte dans plusieurs fichiers
Bonjour,
je n’arrive pas à comprendre en quoi la commande find -exec est dérangeante.
Quoi qu’il en soit, si tu fais un echo de ta variable, tu verras que les fichiers ne sont pas stockés dans celle-ci.
file=$(find […])
sed […] "$file"
En ligne
#3 Le 05/04/2015, à 10:46
- Ric_punk
Re : [résolu] Remplacer du texte dans plusieurs fichiers
Bonjour
Non la commande find -exec n'est pas dérangeante mais j'ai beaucoup de motifs à changer, je voudrais que mon script ne fasse pas des kilomètres de long....
J'ai bien vu qu'en faisant un echo je n'ai pas de résultats, en fait il me manquait uniquement le $ avant la parenthèse
En fait j'ai déjà toutes mes données concernant la commande sed et je voulais éviter de retaper TOUS les chemins vers les fichiers donc avec un find c'est plus pratique surtout que j'ai plusieurs fois les mêmes valeurs à changer dans différents fichiers
mon script donne
file=$(find . -type f -name "*.cfg")
sed -i -e "s/MOTIF ORIGINAL/MOTIF MODIFIE/g" $file
Merci de ton aide ;-)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#4 Le 05/04/2015, à 19:24
- Watael
Re : [résolu] Remplacer du texte dans plusieurs fichiers
salut,
si tu as de nombreuses modifications à réaliser, écrit les dans un script sed (eh, oui, comme le shell, awk, perl, python... sed aussi est "scriptable") !
et continue d'utiliser find -exec \;, ça reste la méthode la plus sûre.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 01/07/2015, à 15:19
- Ric_punk
Re : [résolu] Remplacer du texte dans plusieurs fichiers
Désolé de la réponse super tardive, gros soucis perso...
Merci de votre aide :-)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#6 Le 02/07/2015, à 07:36
- pingouinux
Re : [résolu] Remplacer du texte dans plusieurs fichiers
Bonjour,
Tes commandes en #3 ne sont correctes que si tes noms de fichiers ne contiennent pas d'espaces ou d'autres caractères bizarres. Ton premier find en #1 est bon.
Hors ligne
#7 Le 19/01/2021, à 18:57
- Fred02840
Re : [résolu] Remplacer du texte dans plusieurs fichiers
Six ans plus tard… Je tombe sur cette question, et j'ai trouvé une autre solution très simple (qui me servira ultérieurement):
sed -i 's/mot-a-rempl/nv-mot/g' $(grep -lr "mot-a-rempl" *)
mot-a-rempl = mot à remplacer
nv-mot: nouveau mot
Frédéric
-----------------------
MacBook Pro (dual-boot avec rEFInd : El Capitan et Ubuntu 16.04) ; presse-purée manuel ; moulinette à légumes ; une boîte de Gibolin
Hors ligne