Proteger un argument de sed

Le
Hugolino
Bonjour,

Je suis en train de fignoler un script qui génère une page web pour
publier des photos.

Le script génère en fait deux fichiers, car chaque photo est disponible
en basse et en haute résolution.

Après avoir écrit sur disque le début de l'index basse résolution, je
fais un simple sed pour écrire le début de l'index haute résolution. La
ligne est:

sed "s/$TitrePage/$TitrePage (hi-res)/" $THFILE > $THFILE_HIRES

Problème: le titre d'un index de photos comporte parfois une date avec
des slashs qui perturbent sed qui raconte:

sed: -e expression #1, char 14: unknown option to `s'

Le script est par là : <http://tinyurl.com/5wul8g> et un exemple de
résultat est là : <http://tinyurl.com/4x6t72>

Comment puis-je faire pour que les caractères saisis par le user de
bonne foi ne pose pas problème ?

J'ai bien pensé à un hack ignoble à base de cut -d "/", mais j'ai peur
que la séance de debug qui suivra n'entame sérieusement la ligne de
budget "Aspro" :)


Merci de votre aide.


--
Moduler la turbulence pseudo-adaptative est illogique, puisque
l'incursion localisée va phaser le cybergement aéro-instable.
Hugo (né il y a 1 388 269 031 secondes)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Rémi Moyen
Le #6364501

Bonjour,

sed "s/$TitrePage/$TitrePage (hi-res)/" $THFILE > $THFILE_HIRES

Problème: le titre d'un index de photos comporte parfois une date avec
des slashs qui perturbent sed qui raconte:


Tu connais peut-être déjà, mais le jour où j'avais eu un problème
similaire, une bonne âme m'avait indiqué qu'on peut utiliser n'importe
quel caractère (et pas forcément /) comme séparateur pour sed. Donc un
truc genre :
sed "s|$TitrePage|$TitrePage (hi-res)|" $THFILE > $THFILE_HIRES

Évidemment, si tes variables peuvent aussi contenir des | et que tu ne
trouves aucun caractère dont tu puisses garantir l'inexistence dans les
variables, ça ne résoudra pas ton problème...

J'ai bien pensé à un hack ignoble à base de cut -d "/", mais j'ai peur
que la séance de debug qui suivra n'entame sérieusement la ligne de
budget "Aspro" :)


C'était aussi ce que j'avais essayé (avant qu'on m'indique l'astuce
ci-dessus) et j'avais réussi à faire ce que je voulais avec cut et sed
en plusieurs passes, mais c'était vraiment acrobatique, moche et pas
robuste (ça ne marchait que parce que mes chaînes de caractères
n'étaient pas du tout quelconques).
--
Rémi Moyen

Hugolino
Le #6396241
Le Wed, 23 Apr 2008 20:27:07 +0100, Rémi Moyen a écrit:
sed "s/$TitrePage/$TitrePage (hi-res)/" $THFILE > $THFILE_HIRES

Problème: le titre d'un index de photos comporte parfois une date avec
des slashs qui perturbent sed qui raconte:


Tu connais peut-être déjà, mais le jour où j'avais eu un problème
similaire, une bonne âme m'avait indiqué qu'on peut utiliser n'importe
quel caractère (et pas forcément /) comme séparateur pour sed. Donc un
truc genre :
sed "s|$TitrePage|$TitrePage (hi-res)|" $THFILE > $THFILE_HIRES


Farpait, merci m'sieur : ça roulaize.

Évidemment, si tes variables peuvent aussi contenir des | et que tu ne
trouves aucun caractère dont tu puisses garantir l'inexistence dans les
variables, ça ne résoudra pas ton problème...


Bin, je parlais d'un utilisateur de bonne foi, alors je pense que ça
fera l'affaire.

Merci à toi.


--
Ça déplaisait au youzeur. Personne n'aime passer pour un ignorant, et encore
moins pour un crétin. Alors Bill Gates eut pitié, et il dit : Windows sera
user friendly ! Mais voila : on ne peut pas être copain avec tout le monde. Et
Windows ne cause pas au sysadmin, il boude.


Publicité
Poster une réponse
Anonyme