Am 13.08.21 23:19 schrieb Philippe Meunier:
> Hello,
> 
> While porting a shell script from Linux to OpenBSD I came across the
> following:
> 
> $ uname -a
> Linux foo.there.org 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 
> UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
> $ cat > foo
> test
> hello
> world
> $ sed '0,1d' < foo
> sed: -e expression #1, char 4: invalid usage of line address 0
> $ sed '0,/^hello$/d' < foo
> world
> $ sed '1,/^hello$/d' < foo
> world
> $ sed '0,/^test$/d' < foo
> hello
> world
> $ sed '1,/^test$/d' < foo
> $
> 
> which makes sense since, according to 
> https://www.gnu.org/software/sed/manual/html_node/Addresses.html:
> 
> [...]
> 0,/regexp/
> A line number of 0 can be used in an address specification like 0,/regexp/
> so that sed will try to match regexp in the first input line too. In other
> words, 0,/regexp/ is similar to 1,/regexp/, except that if addr2 matches
> the very first line of input the 0,/regexp/ form will consider it to end
> the range, whereas the 1,/regexp/ form will match the beginning of its
> range and hence make the range span up to the second occurrence of the
> regular expression.
> Note that this is the only place where the 0 address makes sense; there is
> no 0-th line and commands which are given the 0 address in any other way
> will give an error.
> [...]
> 
> Now:
> 
> $ uname -a
> OpenBSD bar.here.org 6.8 GENERIC#0 i386
> $ cat > foo
> test
> hello
> world
> $ sed '0,1d' < foo
> test
> hello
> world
> $ sed '0,/^hello$/d' < foo
> test
> hello
> world
> $ sed '1,/^hello$/d' < foo
> world
> $ sed '0,/^test$/d' < foo
> test
> hello
> world
> $ sed '1,/^test$/d' < foo
> $
> 
> So:
> 
> 1) I'm surprised that '0,1d' and '0,/^hello$/d' and '0,/^test$/d' don't give
> an error.  Looking at the results, I'm not sure what they do, if anything.
> 
> 2) Out of curiosity, is there an OpenBSD equivalent to GNU's '0,/^test$/d' ?

Your first address is 0?
What do you expect from a line number 0?

You can do:
sed '/^test$/d' OR 
sed 1d OR 
grep -v 'test' OR
...



> 
> Thanks,
> 
> Philippe
> 
> 

Reply via email to