#!/bin/bash if [ $# lt 3 ] ; then # Il faut au moins trois arguments echo erreur : remplace 'ere' 'nchaine' file.. exit 1 fi ERE="$1" # le premier arg est l'expression REPLACE="$2" # le deuxieme arg est la nouvelle chaine SEP='%' # nous utiliserons % comme separateur # (le caractere / pourra apparaitre dans l'expression) shift; shift # maintenant, $1 contient le premier nom de fichier # faire une boucle sur tous les fichiers passes # en arguments while [ z$1 != z ] # teste si $1 n'est pas vide # (encore un fichier a traiter?) do if [ f $1 ] ; then # $1 est un fichier sed "s${SEP}${ERE}${SEP}${REPLACE}${SEP}g" $1 \ >/tmp/replace.$$ # le resultat est dirige vers un fichier # temporaire qui est recopie sur le fichier # d'origine si sed a effectue au moins une modification [ $? = 0 ] && cat /tmp/replace.$$ >$1 else echo $1 n\'est pas un fichier, ignore # $1 peut etre un repertoire fi shift # pour passer au suivant, decaler les # arguments d'un pas vers la gauche done # et passer au suivant : fin de la boucle. rm f /tmp/replace.$$ # faire le menage quand tout est fini