sentimancho.'>

Script de modification de texte dans un répertoire

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'outil sed

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.


Posts similaires

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">