Welcome, Guest. Please Login or Register
FUG-FR logo
 
  HomeHelpSearchLoginRegister  
 
[Shell] Combiné Sed grep et find (Read 4383 times)
firebolt31
Full Member
***
Offline



Posts: 102
France
Gender: male
[Shell] Combiné Sed grep et find
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 Smiley

Donc j'ai déjà ca:
Code:
find . -name '*.conf' | xargs grep -i 'url_de_monsite' 


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 Sad

Si quelqu'un pouvait m'aider Smiley

Merci d'avance
Back to top
 
31619680  
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: [Shell] Combiné Sed grep et find
Reply #1 - 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 {} > {};  




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

Back to top
 

" Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes "
WWW WWW elfato_99  
IP Logged
 
fgudin
Global Moderator
*****
Offline


PouetPouetBSD roul3z

Posts: 1552
Thonon (74)
Gender: male
Re: [Shell] Combiné Sed grep et find
Reply #2 - 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' \{\} \; 


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.
Back to top
 
 
IP Logged
 
fgudin
Global Moderator
*****
Offline


PouetPouetBSD roul3z

Posts: 1552
Thonon (74)
Gender: male
Re: [Shell] Combiné Sed grep et find
Reply #3 - 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 {} > {};  


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".
Back to top
 
 
IP Logged
 
firebolt31
Full Member
***
Offline



Posts: 102
France
Gender: male
Re: [Shell] Combiné Sed grep et find
Reply #4 - 14. Jun 2006 at 11:26
 
Merci de votre aide, je vais tester ca des cet aprem Smiley
Back to top
 
31619680  
IP Logged