(Courriels de diversion: <timide@supporterons-reassortirai.com> <ponctua@enoncerait-vehiculerent.com> <purifieraient@soupieres-approvisionnerai.com> <embeguiner@rajouter-cachottieres.com> <encastrerent@charites-banjos.com> <ruinant@plaignaient-chancre.com> <appelles@recycleraient-transcrirai.com> <surgeles@rebiffa-validerait.com> <remmenez@concourant-dissimuleriez.com> <imaginerions@degouts-viroles.com> )


Thomas Nemeth wrote:
> 
> Le 19.09.00, jdd a tapoté :
> 
> | Samedi, en parlant des sites web, on a remarqué que les gestionnaires de
> | site (Dreamweaver...) avaient l'avantage de permettre de modifier une
> | adresse sur l'ensemble des pages d'un site.
> |
> | J'ai eu tout à l'heure à faire une chose analogue, c'est à dire modifier
> | une référence dans un script java sur une vingtaine de pages. J'étais sous
> | windows et les pages étaient très courtes, j'ai fait ca "à la main"
> |
> | mais qui pourrait me donner un "squelette" de script (sed?) pour faire
> | ceci:
> |
> | dans un ensemble de fichiers désigné par un masque (regexp), chercher une
> | chaine et la remplacer par un autre.
> |
> | à vue de nez c'est facile, mais j'ai peur de faire un malheur si je me
> | trompe d'une virgule...
> |
> | au fait, une interface graphique pour ce genr de chose, ca doit pas être
> | très dur ?
> 
>         Non effectivement.
> 
> -------------8<----------------------------------------------------------
> #!/bin/sh
> #
> # Script permettant de remplacer une chaine par une autre dans un ensemble de
> # fichiers passés en paramètres.
> #
> # $ remplace "chaine orig" "nouvelle chaine" liste-de-fichiers
> # e.g. : remplace "ftp.ibp.fr" "ftp.lip6.fr" *.html rep1/*.html ../rep2/*.txt
> ORIGSTR=$1
> shift
> NEWSTR=$1
> shift
> while [ "$1" != "" ]; do
>         sed -e "s/$ORIGSTR/$NEWSTR/g" $1 > $1.tmp
>         mv $1.tmp $1
>         shift
> done
> -------------8<----------------------------------------------------------
> 
>         Il suffit donc de lui passer en paramètre la chaine à remplacer,
>         celle à mettre à la place et la liste de fichiers...
> 
> | merci (plusieurs fois!)
> 
>         Avec plaisir :)
> 
> Thomas

Attention !
Le script ci-dessus ne marche pas si on a le malheur
d'introduire un '/' dans une des deux chaines
$ORIGSTR ou $NEWSTR.

Une solution rustique est de changer le séparateur des
membres de la substitution :
sed -e "s%$ORIGSTR%$NEWSTR%g"
ou
sed -e "s:$ORIGSTR:$NEWSTR:g"

Par prudence, j'ajouterais aussi un test, pour éviter 
d'écraser le fichier d'origine en cas de problème,
en remplaçant :
mv $1.tmp $1
par
if [ $? -eq 0 ]
then
	mv $1.tmp $1
else
	echo "just have a look on $1.tmp"
fi

--
Phil



---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>