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

Le
andre_debian
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é

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/201310161448.06262.andre_debian@numericable.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
S
Le #25723662
Bonjour,

Le mercredi 16 octobre 2013 à 14:48, a écrit :
Soit un modèle comme ceci :
- find /var -exec egrep -n "<expression>" {} ; -print;
- cat fichier | grep -n <expression>
- sed -i 's/<expression>//g' fichier



Quelque chose comme ça ?
find /var -type f -exec sed -i 's/<expression>//g' {} ;

Je te conseille de tester ta commande dans un dossier moins sensible que /var
avant de te lancer (et p'têt aussi de t'assurer que tu as une bonne sauvegarde
dans un coin…).

Seb

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jean-Jacques Doti
Le #25723652
Salut,

Le 16/10/2013 14:48, 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

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Dominique Asselineau
Le #25723822
Sébastien NOBILI wrote on Wed, Oct 16, 2013 at 03:11:39PM +0200
Bonjour,

Le mercredi 16 octobre 2013 à 14:48, a écrit :
> Soit un modèle comme ceci :
> - find /var -exec egrep -n "<expression>" {} ; -print;
> - cat fichier | grep -n <expression>
> - sed -i 's/<expression>//g' fichier

Quelque chose comme ça ?
find /var -type f -exec sed -i 's/<expression>//g' {} ;

Je te conseille de tester ta commande dans un dossier moins sensible que /var
avant de te lancer (et p'têt aussi de t'assurer que tu as une bonne sauvegarde
dans un coin???).



Et ça n'est pas du tout sûr que ce soit suffisant. Le /var contient
des choses dynamiques, notamment si un serveur SQL tourne avec le
risque de désynchroiser les fichiers et ce que contient le cache du
dit serveur. Et il y a peut-être d'autres daemons qui pourraient être
« impactés » ? Bref, ça me paraît bien téméraire de lancer une telle
commande globalement sur tout /var.

dom
--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Philippe Gras
Le #25724062
OK, tournons la question avec un autre exemple que /var

Moi aussi, ça m'intéresse ce truc :-)

Le 16 oct. 13 à 15:59, Dominique Asselineau a écrit :

Sébastien NOBILI wrote on Wed, Oct 16, 2013 at 03:11:39PM +0200
Bonjour,

Le mercredi 16 octobre 2013 à 14:48, a
écrit :
Soit un modèle comme ceci :
- find /var -exec egrep -n "<expression>" {} ; -print;
- cat fichier | grep -n <expression>
- sed -i 's/<expression>//g' fichier



Quelque chose comme ça ?
find /var -type f -exec sed -i 's/<expression>//g' {} ;

Je te conseille de tester ta commande dans un dossier moins
sensible que /var
avant de te lancer (et p'têt aussi de t'assurer que tu as une
bonne sauvegarde
dans un coin???).



Et ça n'est pas du tout sûr que ce soit suffisant. Le /var contient
des choses dynamiques, notamment si un serveur SQL tourne avec le
risque de désynchroiser les fichiers et ce que contient le cache du
dit serveur. Et il y a peut-être d'autres daemons qui pourraient être
« impactés » ? Bref, ça me paraît bien téméraire de lancer une telle
commande globalement sur tout /var.

dom
--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet
"unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
paristech.fr




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
andre_debian
Le #25724132
On Wednesday 16 October 2013 17:44:39 Philippe Gras wrote:
OK, tournons la question avec un autre exemple que /var
Moi aussi, ça m'intéresse ce truc :-)



Merci.

Ça marche très bien :

$ egrep -lR "<expression>" /home/andre/essai/ | xargs -d 'n' -n 1 sed -i ' s/<expression>//g'

Le 16 oct. 13 à 15:59, Dominique Asselineau a écrit :
> Sébastien NOBILI wrote on Wed, Oct 16, 2013 at 03:11:39PM +0200
>> Quelque chose comme ça ?
>> find /var -type f -exec sed -i 's/<expression>//g' {} ;
>> Je te conseille de tester ta commande dans un dossier moins
>> sensible que /var
>> avant de te lancer (et p'têt aussi de t'assurer que tu as une
>> bonne sauvegarde
>> dans un coin???).

> Et ça n'est pas du tout sûr que ce soit suffisant. Le /var contient
> des choses dynamiques, notamment si un serveur SQL tourne avec le
> risque de désynchroniser les fichiers et ce que contient le cache du
> dit serveur. Et il y a peut-être d'autres daemons qui pourraient ê tre
> « impactés » ? Bref, ça me paraît bien téméraire de lanc er une telle
> commande globalement sur tout /var.
> dom



Merci de me prévenir, je vais faire très attention en me limitant à d es sous-répertoires
de /var/ ...

andré

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme