arootbeer has asked for the wisdom of the Perl Monks concerning the following question:

Fellow monks, is there a quick analogue to grep -p using regexp? I'm currently using a

next if ...
statement because I have a specific case that I'm looking for, but I'd like a more general and robust way of getting information on lines that are related to a target line by proximity.

Does perl's built-in grep function support such functionality?

Thanks!

-Matt

Replies are listed 'Best First'.
Re: grep -p ?
by Abigail-II (Bishop) on Dec 09, 2003 at 17:12 UTC
    Could you explain what grep -p is supposed to do? The GNU implementation of grep doesn't know about -p.

    Abigail

      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.
        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

        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)

Re: grep -p ?
by Anonymous Monk on Dec 09, 2003 at 17:24 UTC
    Does perl's built-in grep function support such functionality?
    Did you read the docs for perl's built-in grep function ?