< Browse > Home / Linux / Blog article: Modifier rapidement un ensemble de fichiers sous linux [BASH]

| Mobile | RSS

Modifier rapidement un ensemble de fichiers sous linux [BASH]

January 1st, 2008 | No Comments | Posted in Linux

Vous vous trouvez sous Linux, vous désirez changer une chaîne de caractère avec une faute d'orthographe dans l'ensemble des fichiers d'un dossier? Utilisez le script suivant :

En Bref :

#!/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 "<?" par la chaîne "<?php". Evidemment, je ne veux pas remplacer les bonnes chaînes déjà existantes, sinon j'aurai : "<?<?php" ce qui ne sera pas bon.

Première méthode, je le fais à la bourrin, je remplace tous les "<?" puis je remplace les "<?<?" par "<?".

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 "<?[^php]"

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 "<?" privée de "php" à sa suite, voir expressions rationnelles). Le xargs permet de lire les fichiers envoyé par le pipe de find.

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 "<?[^php]"

... ou bien plus de précision en demandant l'affichage de la ligne :

  • find /rep -name "*.php" | xargs grep -n "<?[^php]"

Script à utiliser pour la modification :

#!/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.

Be Sociable, Share!
Leave a Reply 830 views, 1 so far today |
Tags: , ,

Leave a Reply

CommentLuv badge

Additional comments powered by BackType