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

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

bug#54043: closed (Simple regexp bug [contains spoiler for today's wordl


From: GNU bug Tracking System
Subject: bug#54043: closed (Simple regexp bug [contains spoiler for today's wordle])
Date: Thu, 17 Feb 2022 16:15:02 +0000

Your message dated Thu, 17 Feb 2022 08:13:54 -0800
with message-id 
<CA+8g5KHTHWgsARaMqS7dsL6yJCmMUP+U7ZVC5j-0qqMefOzCEQ@mail.gmail.com>
and subject line Re: bug#54043: Simple regexp bug [contains spoiler for today's 
wordle]
has caused the debbugs.gnu.org bug report #54043,
regarding Simple regexp bug [contains spoiler for today's wordle]
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
54043: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=54043
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: Simple regexp bug [contains spoiler for today's wordle] Date: Thu, 17 Feb 2022 14:47:04 +0000
I noticed this one while doing:

$ grep sha[^s]e five-letter-words
share

which doesn't fit with:

$ grep sha.e five-letter-words
shade
shake
shale
shame
shape
share
shave

A reproducer is easy:

$ echo shame |grep sha[^s]e
(no output)

Almost any change to the regex & input will make it work, even rot-13
of both.  For example:

$ echo shamel |grep sha[^s]e
(no output, still fails)
$ echo shamel |grep sha[^s]el
shamel
$ echo sshame |grep ssha[^s]e
sshame
$ echo funzr |grep fun[^f]r
funzr

$ grep --version
grep (GNU grep) 3.7
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://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 Mike Haertel and others; see
<https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

This is Debian amd64, grep package version 3.7-1.



--- End Message ---
--- Begin Message --- Subject: Re: bug#54043: Simple regexp bug [contains spoiler for today's wordle] Date: Thu, 17 Feb 2022 08:13:54 -0800
On Thu, Feb 17, 2022 at 7:46 AM Matthew Wilcox <willy@infradead.org> wrote:
> I noticed this one while doing:
>
> $ grep sha[^s]e five-letter-words
> share
>
> which doesn't fit with:
>
> $ grep sha.e five-letter-words
> shade
> shake
> shale
> shame
> shape
> share
> shave
>
> A reproducer is easy:
>
> $ echo shame |grep sha[^s]e
> (no output)

This is not a bug in grep. Your failure to quote the regular expression
means that the argument is first interpreted by the shell.
To demonstrate the argument that "grep" ends up using,
run this from that same directory:

  echo sha[^s]e

If I have something named e.g., "shape" in the current directory, that
would print "shape". If I have two matching names, e.g., shave and shale,
it will print both names.

IMHO, it is almost always best to single-quote regular expressions like that.
Quoting your reproducer, you see it works as desired:

  $ echo shame |grep 'sha[^s]e'
  shame


--- End Message ---

reply via email to

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