[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33062: grep matches too lazily when invoked with -zoP and matching b
From: |
Jim Meyering |
Subject: |
bug#33062: grep matches too lazily when invoked with -zoP and matching backreference followed by newline |
Date: |
Sun, 28 Oct 2018 12:19:09 +0000 |
tags 33062 notabug
close 33062
stop
On Tue, Oct 16, 2018 at 2:42 PM Johannes Riecken
<address@hidden> wrote:
> *Bug summary: *GNU grep 3.0-2 matches too lazily when invoked with -zoP and
> matching backreference followed by newline
>
> *Steps to reproduce:*
>
> Create file cases:
>
> foo
> bar
> cases:
> 1: foo
> 2: bar
> baz
> cases:
> 3: baz
> quux
>
> And run grep -zoP '(\s*)cases:\n(\1.*\n)*' cases
>
> *Expected output:*
>
> cases:
> 1: foo
> 2: bar
> cases:
> 3: baz
>
> * Actual output:*
>
> cases:
>
> cases:
Thanks for the report.
However, this is not a bug.
The \s in your regexp matches the preceding newline, too, and that
forces the behavior you see.
I presume you wanted something like this:
$ printf '%s\n' foo bar ' cases:' ' 1: foo' ' 2: bar' baz '
cases:' ' 3: baz' quux\
| grep -zoP '( *)cases:\n(\1.*\n)*'
cases:
1: foo
2: bar
cases:
3: baz
The adjusted regexp works because it accepts only spaces in the group.
Don't be tempted to allow TABs, but rather ensure the input is
expanded to use only spaces for indentation.