On Sat, 09 Dec 2006 12:42:39 +0100
gegetel <[EMAIL PROTECTED]> wrote:

> Bonjour,
> Dans un fichier texte quelconque, il est possible avec sed de remplacer
> une chaîne de caractères par une autre, voire une expression rationnelle
> par une chaîne de caractères. Par exemple :
> sed -i 's/\/mnt.*\/sauv/\/mnt\/removable-3\/sauv/' fichier
> remplacera dans fichier l'unique chaîne de caractères «
> /mnt/chemin_quelconque/sauv » par « /mnt/removable-3/sauv ».
> Mais comment mettre dans la partie droite une chaîne récupérée avec grep
> et awk dans un autre fichier et contenue dans une variable ? J'ai fait
> des essais avec toutes sortes de parenthèses et d'apostrophes à partir de :
> sed -i 's/\/mnt.*\/sauv/$path\/sauv/' fichier
> mais sed ne fait que recopier littéralement « $path/sauv ».
> Et d'après le manuel je crois comprendre que sed ne fait jamais
> d'interprétation dans la partie droite.
> Comment faire ?
> 


un exemple valant mieux qu'une longue explication:

[EMAIL PROTECTED] ~]$ var=foo
[EMAIL PROTECTED] ~]$ echo foo bar | sed 's/bar/$var/'
foo $var
[EMAIL PROTECTED] ~]$ echo foo bar | sed "s/bar/$var/"
foo foo
[EMAIL PROTECTED] ~]$ 

la différence est dans les '' et ""

autre chose, avec sed on peut choisir son délimiteur.
si l'expression contient des '/' on peut utiliser '@' (ou '#' '+' etc)
comme délimiteur et ainsi se passer des '\' ou risquer d'en oublier un.

s@/foo/bar@/bar/foo@ est plus lisible que s/\/foo\/bar/\/bar\/foo/

bye
jipe
=========================================
Vous souhaitez acquerir votre pack ou des services Mandriva?
Rendez-vous sur "http://store.mandriva.com";.
Rejoignez le club Mandriva : http://club.mandriva.com
=========================================

Répondre à