Forums FUG-FR
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl
FreeBSD >> Pratique >> [Shell] Combiné Sed grep et find
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl?num=1150273337

Message started by firebolt31 on 14. Jun 2006 at 10:22

Title: [Shell] Combiné Sed grep et find
Post by firebolt31 on 14. Jun 2006 at 10:22
Bonjour à tous,

Voila je suis entrain d'essayer de combiener les commandes suivnates:
GREP FIND ET SED

Le but ???
Dans une arborescence de fichier, trouver tous les fichiers ayant une certaines chaine de caractère et la modifier par une nouvelle :)

Donc j'ai déjà ca:

Code (]find . -name '*.conf' | xargs grep -i 'url_de_monsite'[/code):
cela me permet d'afficher le nom de tous les fichiers qui contient "url_de_mon_site"
Maintenant avec sed, je peux modifier le fichier avec la commande:
[code]sed s/url_de_mon_site/new_url_de_mon_site/g fichier.conf > fichier.conf


MAis je n'arrive pas a combiner les deux pour faire l'opération en une seule et unique fois :(

Si quelqu'un pouvait m'aider :)

Merci d'avance

Title: Re: [Shell] Combiné Sed grep et find
Post by ros on 14. Jun 2006 at 10:48
Je ne suis pas un maître shell, mais il me semble que tu pourais proceder comme suit :

[code]find . -name '*.conf' -exec grep -qi 'url_de_mon_site {} && sed s/url_de_mon_site/new_url_de_mon_site/g {} > {}; [/code]


Bien entendu je n'ai absolument rien testé de tout cela  ;D


Title: Re: [Shell] Combiné Sed grep et find
Post by francis on 14. Jun 2006 at 10:53
A quelques détails près, ça devrait ressembler à ça:
[code]
find . -name "*.conf" -exec fgrep -i old_url \{\} \; -ok sed -i.bak 's/old_url/new_url/g' \{\} \;[/code]
Si la méthode d'enchainer les deux commandes ne fonctionne pas, tu peux aussi utiliser le flag -print0 et piper dans xargs -0 ....
Le -ok fonctionne comme le -exec mais en demandant confirmation à l'utilisateur (pour le premier run, on sait jamais).
Voila. Reste à corriger d'éventuelles erreurs de quotes, etc.

Title: Re: [Shell] Combiné Sed grep et find
Post by francis on 14. Jun 2006 at 11:00

ros wrote on 14. Jun 2006 at 10:48:
[code]find . -name '*.conf' -exec grep -qi 'url_de_mon_site {} && sed s/url_de_mon_site/new_url_de_mon_site/g {} > {}; [/code]

Je crois que le '&&' et les redirections seront parsés par le shell et pas par find, donc le find sera mal formatté (manquera le \; du -exec) et sed ne trouvera pas son fichier '{}'. En outre, c'est en général la perte des fichiers manipulés lorsqu'on met un fichier en tant qu'entrée et sortie d'une commande (réduction à un fichier vide). C'est pour ça que des commandes comme sed ont un flag "in-place".

Title: Re: [Shell] Combiné Sed grep et find
Post by firebolt31 on 14. Jun 2006 at 11:26
Merci de votre aide, je vais tester ca des cet aprem :)

Forums FUG-FR » Powered by YaBB 2.5.2!
YaBB Forum Software © 2000-2025. All Rights Reserved.