Re: match across line using grep
On 08/03/2010 05:39 AM, Andre Majorel wrote:
> On 2010-08-03 19:37 +0800, Zhang Weiwu wrote:
>> On 2010???08???03??? 17:53, Andre Majorel wrote:
>>>>> $ printf 'a\nb' | grep -zo a.*b
>>>>> (The above should output something /if/ -z would make egrep
>>>>> not consider \n as string terminator. But it has produced no
>>> But grep -z does. This would seem to be an undocumented
>>> limitation of -o.
>> No it doesn't.
>> $ printf 'a\nb' | grep -z 'a.*b'
> You're welcome. What version of grep ?
The -z "sort of" does/doesn't work for me. If I do this:
$ perl -e 'print "a\nb\0"'| grep -z 'a.*b'
There's no output. But change it like this:
$ perl -e 'print "a\nb\0"'| grep -z 'a'
It found, and printed, the newline containing string. I would suspect
the regex engine is still honoring '. (dot) does not match newline'
convention but is OK with literals, if present.
If, instead of using the '.*' pattern, I embed a literal newline, it
$ perl -e 'print "a\nb\0"'| grep -z 'a
And just to prove the point, it does work with multiple null terminated
perl -e 'print "a\nb\0not here\0"'| grep -z 'a
I'm using GNU grep 2.5.3