Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Mar 2007 17:51:07 +0400
From:      Yar Tikhiy <yar@comp.chem.msu.su>
To:        hackers@freebsd.org
Subject:   sed -i
Message-ID:  <20070326135106.GG60831@comp.chem.msu.su>

next in thread | raw e-mail | index | archive | help
Hi,

Recently noticed that our sed(1) differs from its GNU analog in
that in -i mode it considers all files as a single sequence of lines
while the latter treats each file independently.  The in-line mode
isn't in POSIX, so it isn't really clear which way is correct.

Here is a couple of practical consequences:

- our sed won't act on a numeric range of lines in each file,
  as in: sed -i '' 2,5d *, which may be counter-intuitive.
- our sed's line ranges can span file boundaries in -i mode.

If the second feature isn't important, I think we should use
a separate line space for each file edited in-line, which is
usually desired.

Comments?

P.S. Attached are a test script and outputs from it for our
sed and GNU sed as found in a Linux I have access to.

-- 
Yar

%%%%% sed.t %%%%%
#!/bin/sh

files="1 2 3"
lines="1 2 3 4 5"

makefiles()
{
        for f in $files; do
                for n in $lines; do
                        echo $n
                done > $f
        done
}

echo "### Test 1 ###"
makefiles
sed -i.bak 1,3d $files
tail $files

echo "### Test 2 ###"
makefiles
sed -i.bak /5/,/2/d $files
tail $files

%%%%% output using our sed %%%%%

### Test 1 ###
==> 1 <==
4
5

==> 2 <==
1
2
3
4
5

==> 3 <==
1
2
3
4
5
### Test 2 ###
==> 1 <==
1
2
3
4

==> 2 <==
3
4

==> 3 <==
3
4

%%%%% output using GNU sed %%%%%

### Test 1 ###
==> 1 <==
4
5

==> 2 <==
4
5

==> 3 <==
4
5
### Test 2 ###
==> 1 <==
1
2
3
4

==> 2 <==
1
2
3
4

==> 3 <==
1
2
3
4

%%%%% END %%%%%



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070326135106.GG60831>