[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: find d'un répertoire et supprimer une expression dans des fichiers



Salut,

Le 16/10/2013 14:48, andre_debian@numericable.fr a écrit :
Bonjour,

Honte à moi, je sais pas faire,

Je désire accoupler à la commande "find",
la recherche d'une expression dans tous les fichiers
d'un répertoire et ensuite de supprimer cette expression par rien.

Soit un modèle comme ceci :
- find /var -exec egrep -n "<expression>" {} \; -print;
- cat fichier | grep -n <expression>
- sed -i 's/<expression>//g' fichier

Je n'arrive pas à le faire par une ligne sinon par un programme "bash".

Merci d'avance.

andré

Tu peux laisser tomber le find en utilisant la possibilité qu'a grep de parcourir une arborescence et à ne cracher que les noms des fichiers dans lesquels le motif a été trouvé.
Je pense que quelque chose comme ça doit pouvoir répondre à ta demande :

$ egrep -lR "<expression>" /var/ | xargs -d '\n' -n 1 sed -i 's/<expression>//g'

egrep va sortir les noms des fichiers qui contiennent on expression et xargs va appeler sed pour chacun de ces noms, en prenant le retour à la ligne comme séparateur, ce qui permet de traiter correctement les fichiers dont le nom contient des espaces (l'option "-n 1" de xargs permet d'appeler sed pour chacun des fichiers dans lesquels <expression> a été trouvé ; tu peux supprimer cette option et n'appeler sed qu'une seule fois pour plus d'efficacité à condition qu'il n'y ait pas trop de résultats ou mettre une valeur plus importante pour faire moins d'appels à sed).

A+
Jean-Jacques


Reply to: