GNU bug report logs - #62144
Unexpected output

Previous Next

Package: sed;

Reported by: walonen <walonen <at> gmx.net>

Date: Sun, 12 Mar 2023 13:23:02 UTC

Severity: normal

Done: Jim Meyering <jim <at> meyering.net>

Bug is archived. No further changes may be made.

Full log


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

From: Jim Meyering <jim <at> meyering.net>
To: walonen <walonen <at> gmx.net>
Cc: 62144-done <at> debbugs.gnu.org
Subject: Re: bug#62144: Unexpected output
Date: Tue, 14 Mar 2023 09:24:28 -0700
tags 62144 notabug
stop

On Sun, Mar 12, 2023 at 7:24 AM walonen <walonen <at> gmx.net> wrote:
> I have found an unexpected behavior of sed. I would expect the same
> output for the following commands:
>
> sed '/root/!d' /etc/passwd
> sed '/root/{ !d }' /etc/passwd

Thanks for the report, but the '!' modifier must be applied to an
address specification, so your latter command should be spelled like
this:

sed '/root/!{ d }' /etc/passwd

and that is equivalent to the first one.

Quoting the info documentation on this topic:

   Appending the '!' character to the end of an address specification
(before the command letter) negates the sense of the match.  That is, if
the '!' character follows an address or an address range, then only
lines which do _not_ match the addresses will be selected.  The
following command replaces the word 'hello' with 'world' only in lines
_not_ containing the word 'apple':

     sed '/apple/!s/hello/world/' input.txt > output.txt

   The following command replaces the word 'hello' with 'world' only in
lines 1 to 3 and 18 till the last line of the input file (i.e.
excluding lines 4 to 17):

     sed '4,17!s/hello/world/' input.txt > output.txt




This bug report was last modified 2 years and 73 days ago.

Previous Next


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