Vous êtes ici

Block title

i class="icon icon icon search" aria-hidden="true"> Recherche

Block content
Block title
Block content

Chercher et Remplacer une chaîne dans plusieurs fichiers d'un répertoire sous Linux

Recursive Find/Replace string

Date de publication: 
mar, 08/06/2013 - 13:22
Dernière modification: 
mer, 08/20/2014 - 15:09
Auteur: 
david

Comment remplacer une chaîne de caractère/mot clé par une autre parmi plusieurs fichiers d'un même répertoire sous Linux ?

Lister les fichiers contenant une chaîne de caractères

aucun commentaire | 0 vote

Beginner
+1 0 -1
Vous n'avez pas voté...
Lister les fichiers contenant une chaîne de caractères
Solution publiée le 08/20/2014 - 15:07 par david, dernière modification il y a 2 années 10 mois.

Très pratique, voici comment modifier récursivement tous les fichiers d'un répertoire (et de ses sous-répertoire) qui contienne une chaîne afin de la remplacer par une autre.

Dans un premier temps, le mieux est d'avoir un aperçu des fichiers qui seront modifiés... nous devons alors {{chercher une chaîne précise dans tous les fichiers d'un répertoire}}.

Dans notre cas nous cherchons donc à lister les fichiers contenant la chaîne {{"/var/www"}}, la recherche s’effectue dans le dossier courant ainsi que dans tous les sous-répertoires :

grep -lR "/var/www" *

Liens (0)

Fichiers (0)

Pas de fichiers...

Commentaires (0)

Remplacer une chaîne par une autre dans tous les fichiers d'un répertoire

aucun commentaire | 0 vote

Beginner
+1 0 -1
Vous n'avez pas voté...
Remplacer une chaîne par une autre dans tous les fichiers d'un répertoire
Solution publiée le 08/20/2014 - 15:09 par david, dernière modification il y a 2 années 10 mois.

Pour {{remplacer }} la chaîne "{{titi}}" par "{{toto}}" dans {{tous les fichiers du répertoire courant}} :

find . -type f -exec sed -i -e 's/titi/toto/g' {} \;

Pour {{remplacer }} la chaîne "{{titi}}" par "{{toto}}" dans {{tous les fichiers .txt du répertoire courant}} :

find . -type f -iname "*.txt" -exec sed -i -e 's/titi/toto/g' {} \;

Pour {{remplacer }} la chaîne "{{titi}}" par "{{toto}}" dans {{tous les fichiers .txt du répertoire /home/user}} :

find /home/user -type f -iname "*.txt" -exec sed -i -e 's/titi/toto/g' {} \;

Pour {{remplacer }} la chaîne "{{titi}}" par "{{toto}}" dans {{tous les fichiers .txt du répertoire /home/user}} avec une sauvegarde des fichiers modifiés {(la sauvegarde ce situe au même niveau que le fichier d'origine renommée avec le suffixe "{{.bak}}")} :

find /home/user -type f -iname "*.txt" -exec sed -i.bak -e 's/titi/toto/g' {} \;

Attention à bien "échapper" le slash(/) par un anti-slash (\), exemple pour remplacer le répertoire "{{/var/www/user}}" par "{{/home/user}}" :

find . -type f -exec sed -i -e 's/\/var\/www\/user/\/home\/user/g' {} \;

 

Liens (0)

Fichiers (0)

Pas de fichiers...

Commentaires (0)