[Bash] Modifier une occurence dans une série de fichiers
Si vous faîtes de la mise en donnée massive ou que vous avez parfois besoin de modifier la même occurrence dans beaucoup de fichiers en simultané. Voici un petit script qui peut vous aider.
Le problème est simple rechercher tous les fichiers dans une sous-arborescence de répertoires avec find afin d’y modifier une occurrence avec sed.
#! /bin/bash # On vérifie que le bon nombre d'arguments a été envoyé au script. if [ $# -ne 3 ] ; then echo " Usage : " $0 " 'FILES' 'STRING TO REPLACE' 'REPLACEMENT STRING' " exit fi # On charge les arguments FILE=$1 TEXTE=$2 REPLACE=$3 # Oncherche l'ensemble des fichiers concernés. FILES=`find -name "$FILE"` # On applique les modifications for i in $FILES; do sed "s/$TEXTE/$REPLACE/g" "$i" > tmp mv tmp $i done
Pour se servir du script :
script.sh ‘*.txt’ ‘Salut mon amour’ ‘Adieu traîtresse’
Qui permettra de modifier toutes vos lettres d’amour en une commande. :)
Bon le script doit être améliorable en modifiant directement le fichier sans passer par tmp et le find peut être améliorer à souhait.