Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

sed sur Mac OS

21 views
Skip to first unread message

Cornillet Pascal

unread,
Feb 21, 2008, 11:03:54 PM2/21/08
to
Bonsoir,
je suis sous linux et un utilisateur sous Mac OS me rapporte un problème
avec sed qui est utilisé dans le Makefile d'un projet.

Le problème est qu'un motif de remplacement doit contenir des guillemets
(simple ou double peu importe), or il semblerait que sous Mac OS les
guillemets à l'intérieur de la commande sed soient supprimées.
Nous avons essayé avec les commandes suivantes :

sed -e 's/pattern/"replacement"/g'
sed -e 's/pattern/'\''replacement'\''/g'

qui malheureusement sont interprétés sous mac comme :

sed -e 's/pattern/replacement/g'

Quel astuce puis-je utiliser pour que le motif de remplacement contienne des
guillemets (et que cela fonctionne sous mac-os) ?

d'avance merci

PS: je ne sais pas s'il y a une interaction, mais la commande sed est à
l'intérieur d'un sous shell: `...`
ce sous shell fournissant des arguments à une commande de compilation.

Vincent Lefevre

unread,
Feb 22, 2008, 8:43:46 PM2/22/08
to
Dans l'article <fplhet$e38$1...@news.tiscali.fr>,
Cornillet Pascal <p.cor...@laposte.net> écrit:

> Le problème est qu'un motif de remplacement doit contenir des guillemets
> (simple ou double peu importe), or il semblerait que sous Mac OS les
> guillemets à l'intérieur de la commande sed soient supprimées.
> Nous avons essayé avec les commandes suivantes :

> sed -e 's/pattern/"replacement"/g'
> sed -e 's/pattern/'\''replacement'\''/g'

> qui malheureusement sont interprétés sous mac comme :

> sed -e 's/pattern/replacement/g'

Aucun problème ici, sous Mac OS X 10.4.11:

prunille:~> echo foo | /usr/bin/sed -e 's/o/"a"/g'
f"a""a"

> PS: je ne sais pas s'il y a une interaction, mais la commande sed est à
> l'intérieur d'un sous shell: `...`

Ah... c'est peut-être là qu'il y a un problème, genre une double
évaluation qui font disparaître un niveau de guillemets. Parfois
il faut mettre plusieurs backslashes à la suite pour s'en sortir
(et en plus, ça peut dépendre du shell). C'est une des horreurs
des shells...

--
Vincent Lefèvre <vin...@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Cornillet Pascal

unread,
Feb 26, 2008, 11:19:08 AM2/26/08
to
> Ah... c'est peut-être là qu'il y a un problème, genre une double
> évaluation qui font disparaître un niveau de guillemets. Parfois
> il faut mettre plusieurs backslashes à la suite pour s'en sortir
> (et en plus, ça peut dépendre du shell). C'est une des horreurs
> des shells...

S'il pouvait y avoir une bonne âme pour tester ce que donnent les commandes
suivantes sous Mac-OS (avec son shell par défaut), je lui en serais
reconnaissant :

echo `echo foo | sed -e 's/o/"a"/g'`

echo `echo foo | sed -e 's/o/'\''a'\''/g'`

echo `echo foo | sed -e 's/o/'\\''a'\\''/g'`

echo `echo foo | sed -e "s/o/\"a\"/g"`

echo `echo foo | sed -e "s/o/\\"a\\"/g"`

echo `echo foo | sed -e "s/o/'a'/g"`

echo `echo foo | sed -e "s/o/\'a\'/g"`

echo `echo foo | sed -e "s/o/\\'a\\'/g"`

echo `echo foo | sed -e "s/o/\\\'a\\\'/g"`

echo `echo foo | sed -e "s/o/\\\\'a\\\\'/g"`


Cornillet Pascal

unread,
Feb 26, 2008, 11:32:00 AM2/26/08
to
Cornillet Pascal wrote:

>> Ah... c'est peut-être là qu'il y a un problème, genre une double
>> évaluation qui font disparaître un niveau de guillemets. Parfois
>> il faut mettre plusieurs backslashes à la suite pour s'en sortir
>> (et en plus, ça peut dépendre du shell). C'est une des horreurs
>> des shells...
>
> S'il pouvait y avoir une bonne âme pour tester ce que donnent les
> commandes suivantes sous Mac-OS (avec son shell par défaut), je lui en
> serais reconnaissant :

Je complète la liste, pour essayer d'être à peu prêt exhaustif avec tout ce
qui semble fonctionner sous linux.

echo `echo foo | sed -e 's/o/"a"/g'`

echo `echo foo | sed -e 's/o/'\''a'\''/g'`

echo `echo foo | sed -e 's/o/'\\''a'\\''/g'`

echo `echo foo | sed -e "s/o/\"a\"/g"`

echo `echo foo | sed -e "s/o/\\"a\\"/g"`

echo `echo foo | sed -e "s/o/'a'/g"`

echo `echo foo | sed -e "s/o/\'a\'/g"`

echo `echo foo | sed -e "s/o/\\'a\\'/g"`

echo `echo foo | sed -e "s/o/\\\'a\\\'/g"`

echo `echo foo | sed -e "s/o/\\\\'a\\\\'/g"`


echo `echo foo | sed -e 's/o/\"a\"/g'`

echo `echo foo | sed -e 's/o/\\"a\\"/g'`

echo `echo foo | sed -e 's/o/'"'a'"'/g'`

echo `echo foo | sed -e 's/o/'\"'a'\"'/g'`

echo `echo foo | sed -e 's/o/'\\"'a'\\"'/g'`


Anthony Gelibert

unread,
Feb 26, 2008, 2:42:32 PM2/26/08
to
Bon alors, j'ai gentiment éxécuté tes commandes ;-)
Mac Book 2éme Génération : Mac OS X 10.4.11 Intel

tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/"a"/g'`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/'\''a'\''/g'`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/'\\''a'\\''/g'`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\"a\"/g"`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\\"a\\"/g"`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/'a'/g"`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\'a\'/g"`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\\'a\\'/g"`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\\\'a\\\'/g"`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e "s/o/\\\\'a\\\\'/g"`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/\"a\"/g'`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/\\"a\\"/g'`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/'"'a'"'/g'`
f'a''a'
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/'\"'a'\"'/g'`
f"a""a"
tony@my-Laptop:~$ echo `echo foo | sed -e 's/o/'\\"'a'\\"'/g'`
f"a""a"

Voila.

Eric Levenez

unread,
Feb 26, 2008, 3:02:55 PM2/26/08
to
Le 22/02/08 05:03, dans <fplhet$e38$1...@news.tiscali.fr>, « Cornillet Pascal »
<p.cor...@laposte.net> a écrit :

> je suis sous linux et un utilisateur sous Mac OS me rapporte un problème
> avec sed qui est utilisé dans le Makefile d'un projet.

Pour information Mac OS X est un système unix et Mac OS est l'ancien système
qui n'a rien à voir.

> Le problème est qu'un motif de remplacement doit contenir des guillemets
> (simple ou double peu importe), or il semblerait que sous Mac OS les
> guillemets à l'intérieur de la commande sed soient supprimées.
> Nous avons essayé avec les commandes suivantes :
>
> sed -e 's/pattern/"replacement"/g'
> sed -e 's/pattern/'\''replacement'\''/g'
>
> qui malheureusement sont interprétés sous mac comme :
>
> sed -e 's/pattern/replacement/g'
>
> Quel astuce puis-je utiliser pour que le motif de remplacement contienne des
> guillemets (et que cela fonctionne sous mac-os) ?

L'évaluation des caractères spéciaux est faite au niveau du shell (et pas
des commandes comme sous Windows). Sous Mac OS X (et pas Mac OS ou mac-os ou
Mac-OS), le shell par défaut était, il y a quelques années, tcsh; et est
maintenant bash. La dernière version de Mac OS X utilise la version bash du
GNU version "3.2.17(1)-release". Le programme make de Mac OS X est lui aussi
du GNU, comme sur GNU/Linux (version 3.81 pour la dernière version).

Ceci étant dit, il n'y a aucune différence d'évaluation des patterns que tu
donnes entre un bash sur Mac OS X ou un bash sur GNU/Linux (enfin au bugs
entre versions bash bien sûr).

Toute personne sous Mac OS X peut installer et configurer à sa façon le
shell qui veut, ceci n'est pas réservé aux utilisateurs GNU/Linux. On peut
trouver ainsi des shells qui ignorent la casse dans le traitement des
fichiers, d'autres non. Il serait bon de connaître la configuration qui a
été modifiée sur le Mac OS X de ton utilisateur pour connaître la cause du
problème.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Anthony Gelibert

unread,
Feb 26, 2008, 5:41:10 PM2/26/08
to
J'aurais une remarque...
Mac OS X repose sur le noyau xnu qui utilise entre autre une petite
portion de FreeBSD (si ma mémoire est bonne).. Et les outils livré en
standard avec le shell appartienne au monde BSD et sont donc du point
de vue de la syntaxe et de quelques autres trucs différent de ceux sur
linux.
Ainsi par exemple sur mon mac (10.4.11), quand je fais un "man sed",
j'obtiens une page de man BSD. Donc n'y a t il pas quand même une
différence autre que la simple opposition "bash"/"tcsh" ?
A moins que je fasse totalement fausse route ?

Eric Levenez

unread,
Feb 27, 2008, 1:20:15 AM2/27/08
to
Le 26/02/08 23:41, dans <fq24jc$he1$1...@netfinity.fr>, « Anthony Gelibert »
<Tony...@gmail.com> a écrit :

> A moins que je fasse totalement fausse route ?

Voilà :-)

Les caractères spéciaux sont interprétés par le shell et pas par sed. Et le
shell standard actuel est bash du GNU, comme sur un GNU/Linux standard.

Vincent Lefevre

unread,
Feb 27, 2008, 6:32:10 AM2/27/08
to
Dans l'article <C3EA2EFF.C6362%use...@levenez.com>,
Eric Levenez <use...@levenez.com> écrit:

> Le programme make de Mac OS X est lui aussi du GNU, comme sur
> GNU/Linux (version 3.81 pour la dernière version).

Sous Mac OS X 10.4.11, il s'agit de GNU Make 3.80 alors que comme tu
le dis, la dernière version est la 3.81. La version de GNU Make est
importante, car GNU Make 3.81 est sensiblement incompatible avec les
versions précédentes, notamment pour être conforme à POSIX (je le sais
d'autant plus que j'ai été confronté à ce problème il y a quelques
mois, en essayant de compiler un logiciel sous un Linux avec la 3.81),
cf le fichier NEWS.

Eric Levenez

unread,
Feb 27, 2008, 6:46:56 AM2/27/08
to
Le 27/02/08 12:32, dans <20080227112513$13...@prunille.vinc17.org>, « Vincent
Lefevre » <vincen...@vinc17.org> a écrit :

> Dans l'article <C3EA2EFF.C6362%use...@levenez.com>,
> Eric Levenez <use...@levenez.com> écrit:
>
>> Le programme make de Mac OS X est lui aussi du GNU, comme sur
>> GNU/Linux (version 3.81 pour la dernière version).
>
> Sous Mac OS X 10.4.11, il s'agit de GNU Make 3.80 alors que comme tu
> le dis, la dernière version est la 3.81. La version de GNU Make est
> importante, car GNU Make 3.81 est sensiblement incompatible avec les
> versions précédentes, notamment pour être conforme à POSIX (je le sais
> d'autant plus que j'ai été confronté à ce problème il y a quelques
> mois, en essayant de compiler un logiciel sous un Linux avec la 3.81),
> cf le fichier NEWS.

La 3.81 est celle utilisée avec le dernier Xcode d'Apple (que j'utilise avec
Mac OS X 10.5.2, je ne sais pas si elle est disponible sur Tiger).

Vincent Lefevre

unread,
Feb 27, 2008, 8:47:36 AM2/27/08
to
Dans l'article <C3EB0C40.C6410%use...@levenez.com>,
Eric Levenez <use...@levenez.com> écrit:

> La 3.81 est celle utilisée avec le dernier Xcode d'Apple (que


> j'utilise avec Mac OS X 10.5.2, je ne sais pas si elle est
> disponible sur Tiger).

Ah, je ne savais pas que make était installé via Xcode (dommage
que la page man ne le dise pas). Je n'ai que Xcode 2.4.1. La 2.5
est dispo pour Tiger (j'ai dû manquer l'annonce). En revanche,
la 3.0 ne fonctionne que sous Leopard:

http://www.developpez.net/forums/showthread.php?t=436345

0 new messages