emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#27354: closed (strange behavior of sed)


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#27354: closed (strange behavior of sed)
Date: Wed, 14 Jun 2017 15:00:04 +0000

Your message dated Wed, 14 Jun 2017 14:58:35 +0000
with message-id <address@hidden>
and subject line Re: bug#27354: strange behavior of sed
has caused the debbugs.gnu.org bug report #27354,
regarding strange behavior of sed
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
27354: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=27354
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: strange behavior of sed Date: Wed, 14 Jun 2017 11:48:41 +0800
Hi Team,

Please check this below:

~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

~$ sed --version
sed (GNU sed) 4.2.2
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <address@hidden>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.


Problem reproduce process:

~$ cat testfile
127.0.0.1 localhost hostname
::1     localhost ip6-localhost ip6-loopback

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 $HOSTNAME.domainname $HOSTNAME" testfile
127.0.0.1 localhost
127.0.0.1 node1.domainname node1
127 localhost hostname
::1     localhost ip6-localhost ip6-loopback

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 $HOSTNAME.domainname $HOSTNAME" testfile
::1     localhost ip6-localhost ip6-loopback

expected output:
127.0.0.1 localhost
127.0.0.1 node1.domainname node1
::1     localhost ip6-localhost ip6-loopback

If I add a comment at first line. then it's working.
~$ cat testfile
# comment
127.0.0.1 localhost hostname
::1     localhost ip6-localhost ip6-loopback

~$ sed -e '/127.0.0.1/d' -e "1i 127.0.0.2 localhost\n127.0.0.2 $HOSTNAME.domainname $HOSTNAME" testfile
127.0.0.2 localhost
127.0.0.2 node1.domainname node1
# comment
::1     localhost ip6-localhost ip6-loopback


--- End Message ---
--- Begin Message --- Subject: Re: bug#27354: strange behavior of sed Date: Wed, 14 Jun 2017 14:58:35 +0000 User-agent: Mutt/1.5.23 (2014-03-12)
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





--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]