GNU bug report logs - #27354
strange behavior of sed

Previous Next

Package: sed;

Reported by: Han Lu <luhanwa <at> gmail.com>

Date: Wed, 14 Jun 2017 04:10:02 UTC

Severity: normal

Tags: notabug

Done: Assaf Gordon <assafgordon <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #18 received at 27354-done <at> debbugs.gnu.org (full text, mbox):

From: Han Lu <luhanwa <at> gmail.com>
To: Assaf Gordon <assafgordon <at> gmail.com>
Cc: 27354-done <at> debbugs.gnu.org
Subject: Re: bug#27354: strange behavior of sed
Date: Tue, 20 Jun 2017 14:24:51 +0800
[Message part 1 (text/plain, inline)]
Hi Assaf,

Thanks for the explanation.

But if I put 'i' command before 'd' command, shouldn't the input new lines
be deleted ? Since new inputed lines contain the pattern 'd' command want.

Br,
Xingming

2017-06-14 22:58 GMT+08:00 Assaf Gordon <assafgordon <at> gmail.com>:

> tag 27354 notabug
> thanks
>
> Hello,
> On Wed, Jun 14, 2017 at 11:48:41AM +0800, Han Lu wrote:
> [...]
>
>> The below command works as expected.
>> ~$ sed -e 's/127.0.0.1/127/' -e "1i 127.0.0.1 localhost\n127.0.0.1
>>
> [...]
>
>> But command below is not working as expeced:
>> ~$ sed -e '/127.0.0.1/d' -e "1i 127.0.0.1 localhost\n127.0.0.1
>>
>
> First,
> thank you for providing such clear information on how to
> reproduce your output - it makes troubleshooting much easier.
>
> This is not a bug in sed, but a side-effect of the 'd' (=delete)
> command: when sed executes the 'd' command, it immediately starts
> a new cycle (i.e. skips all other commands, reads the next line of the
> input, and starts from the first sed command).
>
> In your example, the sequence is:
> 1. sed reads the first input line (it contains '127.0.0.1')
> 2. the 'd' command is executed - line is deleted and not printed,
>   and sed restarts a new cycle:
>   it skips all other commands and reads the next input line.
> 4. The first time the '1i' command is executed, sed is already
>   on the second input line, and the address '1' is never matched -
>   the command is never executed.
>
> This also explains why it does work when you add a dummy comment line:
> The '/127.0.0.1/d' does not match the first line,
> and then the '1i' command is matched and executed.
>
> A simple work-around would be to put the 'i' command
> before the 'd' command, like so:
>
>    sed -e '1i 127.0.0.1 ....' -e '/127/d'
>
> As such, I'm marking this as 'not a bug',
> but discussion can continue by replying to this thread.
>
> regards,
> - assaf
>
>
>
>
[Message part 2 (text/html, inline)]

This bug report was last modified 7 years and 339 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.