Yes, this seems to fix this particular issue for me nicely,
but the "int i = 0;" is probably not needed.


On Sun, Sep 24, 2017 at 11:59:49PM +0200, Martijn van Duren wrote:
> and now with 100% more patch...
> 
> Index: process.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/sed/process.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 process.c
> --- process.c 22 Feb 2017 14:09:09 -0000      1.32
> +++ process.c 24 Sep 2017 21:58:14 -0000
> @@ -336,6 +336,7 @@ substitute(struct s_command *cp)
>       int n, lastempty;
>       size_t le = 0;
>       char *s;
> +int i = 0;
>  
>       s = ps;
>       re = cp->u.s->re;
> @@ -386,7 +387,7 @@ substitute(struct s_command *cp)
>                * and at the end of the line, terminate.
>                */
>               if (match[0].rm_so == match[0].rm_eo) {
> -                     if (*s == '\0' || *s == '\n')
> +                     if (*s == '\0')
>                               slen = -1;
>                       else
>                               slen--;
> 
> 
> On 09/24/17 23:57, Martijn van Duren wrote:
> > This fixes the issue for me, but I'm not sure about the motivation
> > behind the check.
> > Maybe schwarze@ can shed some light on it, since he's to (cvs) blame for
> > the particular line.
> > 
> > martijn@
> > 
> > On 09/24/17 15:42, Andreas Kusalananda Kähäri wrote:
> >> Hi,
> >>
> >> Given the input file of three lines:
> >>
> >> line 1
> >> line 2
> >> line 3
> >>
> >> and the sed script
> >>
> >> s/\</\
> >> /g
> >> s/^/hello/
> >>
> >> which inserts a newline in front of every word and then prepends the
> >> word "hello" to the beginning of the pattern space.
> >>
> >> The following happens:
> >>
> >> $ sed -f script.sed input.txt
> >> hello
> >>
> >> hello
> >>
> >> hello
> >>
> >>
> >> I was expecting to get
> >>
> >> hello
> >> line
> >> 1
> >> hello
> >> line
> >> 2
> >> hello
> >> line
> >> 3
> >>
> >> This is a bit surprising since running only the first sed expression
> >> gives (as expected)
> >>
> >>
> >> line
> >> 1
> >>
> >> line
> >> 2
> >>
> >> line
> >> 3
> >>
> >>
> >> The question is, why does the "line N" data disappear when inserting a
> >> word at the start of the pattern space here?
> >>
> >> I'm also noticing that this does not happen if a space (for instance)
> >> precedes the escaped newline in the first expression:
> >>
> >> s/\</ \
> >> /g
> >> s/^/hello/
> >>
> >>
> >> This is using sed in the base system on OpenBSD 6.1-stable (amd64).
> >>
> >> Cheers,
> >>
> > 

-- 
Andreas Kusalananda Kähäri,
National Bioinformatics Infrastructure Sweden (NBIS),
Uppsala University, Sweden.

Reply via email to