(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/>