in reply to Re: grep -p ?
in thread grep -p ?

in AIX, grep -p will grab the paragraph surrounding a line. for instance, grep -p "lazy" on
the quick
red fox

jumped over
the lazy
brown dog.
will return the last 3 lines,
jumped over
the lazy
brown dog.

Replies are listed 'Best First'.
Re: grep -p ?
by Abigail-II (Bishop) on Dec 09, 2003 at 17:27 UTC
    Just turn on paragraph mode then.
    #!/usr/bin/perl use strict; use warnings; $/ = ""; # Paragraph mode. while (<DATA>) { print if /lazy/; } __DATA__ the quick red fox jumped over the lazy brown dog. jumped over the lazy brown dog.

    Abigail

      That's what I was looking for, thanks. I went back to the camel and found the $/ variable; I had glanced past it when I was looking for this one. (The explanation there is "If set to the null string, it treats blank lines as delimiters.")

      Thanks again!

Re: Re: Re: grep -p ?
by duff (Parson) on Dec 09, 2003 at 17:28 UTC

    Hmm. Sounds like he should just slurp his file in paragraph mode, or if he has an array, stringify it and slurp it in paragraph mode.

    A one-liner ...

    perl -000 -ne 'print if /lazy/' lazy_file

    See Abigail's non-one-liner too.

    Update: When I wrote

    stringify it and slurp ... in paragraph mode
    I was thinking of perl's new open-and-read-from-a-scalar, but it appears that it doesn't recognize reading in paragraph mode. Is there any way to make this work:

    # assuming @array already exists for some reason $str = join "", @array; open S, "<", \$str or die; $/ = ""; # paragraph mode normally while (<S>) { print if /lazy/; } close S;

    Or is this a bug? (I'm using perl 5.8.0)