[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.


Vus : 1789
Publié par Boutor : 56