--line-regexp option with null data

Eric Blake eblake@redhat.com
Fri Jul 17 11:55:00 GMT 2015

On 07/16/2015 08:04 PM, John Hein wrote:

>  >     printf 'alpha\0bravo\0charlie\0' | grep --line-regexp --quiet bravo
>  >
>  > My thinking tells me that because I have not used `--null-data`, grep should see
>  > 1 or even 0 lines separated by newline, and fail to match a `bravo` followed by
>  > newline. However it does not, it succeeds just like the first command, why is
>  > this?
>  >
>  > Note I also tried this on Debian with Grep 2.2 and it works as expected.
>  >
>  > http://stackoverflow.com/q/31467045
> cygwin grep is detecting the input as binary which seems to be
> overriding the 'match the whole line' behavior of --line-regexp.  Get
> rid of --quiet to see that.

The behavior on Linux is the same.  See the NEWS for grep 2.21:

  When searching binary data, grep now may treat non-text bytes as
  line terminators.  This can boost performance significantly.

> That does seem like a bug in the cygwin implementation of grep to me.

No, it is intentional upstream behavior.

> As a workaround for this simple example, you can add -a (aka --text)
> to force it to treat the input as text.

Yes, that IS the correct solution.  You must TELL grep to not treat \0
as a line terminator.

Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://cygwin.com/pipermail/cygwin/attachments/20150717/f97b4712/attachment.sig>

More information about the Cygwin mailing list