Script de modification de texte dans un répertoire
Jan 14, 2008 Scripts utiles
Vous venez de vous rendre compte qu’une faut d’orthographe s’est glissée dans toutes vos pages, ou bien que le nom d’une variable a été mal écrit par endroits. L’erreur se trouve malheureusement présente dans 348 fichiers… Comment faire? Vous pouvez utilisez un petit script bash tel que ci dessous afin d’automatiser le processus. Utilisez le script suivant :

Modification de texte avec l
En Bref :
1 2 3 4 5 6 | #!/bin/bash for file in *.php do echo "Traitement de $file ..." sed -e "s/eMssage avec erreur/Message sans erreur/g" "$file" > "$file".tmp && mv -f "$file".tmp "$file" done |
Pour cela, ouvrir une console :
- cd /chemin/dossier (placez vous dans le dossier concerné)
- touch monscript.sh (créer un fichier vide nommé monscript)
éditez le fichier et collez le script ci-dessus en faisant les changement nécessaire
- ./monscript.sh (executer lescript en local)
Le principe :
for file in *.php <- Tous les fichiers du répertoire qui finissent par l'extension .php
echo “Traitement de $file …” <- On indique leur nom
sed -e “s/eMssage avec erreur/Message sans erreur/g” “$file” > “$file”.tmp && mv -f “$file”.tmp “$file”
<- On substitue (s) le premier message par le deuxième message, à toutes les lignes (g). On applique cela à tous les fichiers que l'on traite actuellement, et onrenomme les fichiers temporaires créés pour l'occasion
Plus d’info sur : http://fr.wikipedia.org/wiki/Sed_(logiciel)
Remplacer un texte dans des fichiers : Méthode évoluée
A présent je veux remplacer dans l’ensemble de mes fichiers .php la chaine “
Première méthode, je le fais à la bourrin, je remplace tous les “
Deuxième méthode, je suis plus doux, et je vais : chercher les fichiers .php à modifer, effectuer la modification ciblée.
Pour trouver les fichiers à modifier :
- find /rep -name “*.php” | xargs grep ”
Le principe: le find permet de trouver les fichiers ayant l’extension .php. Le grep permet de trouver dans un fichier une expression donnée (ici “
Si on a peur d’obtenir beaucoup de résultats on peux demander uniquement l’affichage du nom des fichiers en question :
- find /rep -name “*.php” | xargs grep -l “
… ou bien plus de précision en demandant l’affichage de la ligne :
- find /rep -name “*.php” | xargs grep -n “
Script à utiliser pour la modification :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/sh old_value="<?"; new_value="<?php"; ignore_value="<?php"; SUCCESS=0 for file in $(find . -name "*.php") do echo "Traitment de : $file" grep -q "$old_value" "$file" if [ $? -eq $SUCCESS ] # if grep -q "$word" "$filename" can replace lines 5 - 7. then mv $file $file.old2 sed "/$ignore_value/!s/$old_value/$new_value/g" < $file.old2 > $file rm $file.old2 fi done |
On le place dans /html et on exécute. Pensez à sauver auparavant, sait-on jamais.
Leave a Reply