Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/04/2015, à 10: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, à 20:12)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#2 Le 05/04/2015, à 11: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"

Hors ligne

#3 Le 05/04/2015, à 11: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, à 20: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, à 16:19

Ric_punk

Re : [résolu] Remplacer du texte dans plusieurs fichiers

Désolé de la réponse super tardive, gros soucis perso... hmm

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, à 08: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, à 19: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