OVH Cloud OVH Cloud

Comportement de sed

2 réponses
Avatar
Vincent Lefevre
Sous Mac OS X, j'obtiens ceci:

prunille% cat > file
foo
prunille% /usr/bin/sed -i -n "s/$/bar/p" file
prunille% cat file
foobar
foobar
prunille%

Si j'enlève le -i ou si j'utilise GNU sed, j'obtiens bien une
seule fois foobar. Le comportement ci-dessus est-il un bug, ou
est-ce que la construction que j'ai employée est non portable?

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

2 réponses

Avatar
Stephane Chazelas
On Thu, 28 Jul 2005 10:28:48 +0000 (UTC), Vincent Lefevre wrote:
Sous Mac OS X, j'obtiens ceci:

prunille% cat > file
foo
prunille% /usr/bin/sed -i -n "s/$/bar/p" file
prunille% cat file
foobar
foobar
prunille%

Si j'enlève le -i ou si j'utilise GNU sed, j'obtiens bien une
seule fois foobar. Le comportement ci-dessus est-il un bug, ou
est-ce que la construction que j'ai employée est non portable?


-i n'est certainement pas portable. Il semble que "-i" implique
que "-n" soit ignoré dans ton cas.

Tu peux essayer d'inverser les options, ou de rajouter un -e
'#n' pour voir si ca fait une difference.

"-i" est une GNUserie copiée par les BSD (a moins que ce soit le
contraire).

perl -ni -e 'print if s/$/bar/' file

sera portable.

ex -sc '%s/$/bar/|w|q' file

sera POSIX.

--
Stephane

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

perl -ni -e 'print if s/$/bar/' file

sera portable.


C'est vrai que j'utilise perl à d'autres endroits pour la portabilité,
car il est installé partout.

Merci.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA