Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Perl Programming Language

FAQ 6.3 How can I pull out lines between two patterns that are themselves on different lines?


This is an excerpt from the latest version perlfaq6.pod, which
comes with the standard Perl distribution. These postings aim to
reduce the number of repeated questions as well as allow the community
to review and update the answers. The latest version of the complete
perlfaq is at http://faq.perl.org .

--------------------------------------------------------------------

6.3: How can I pull out lines between two patterns that are themselves on different lines?

    You can use Perl's somewhat exotic ".." operator (documented in perlop):

            perl -ne 'print if /START/ .. /END/' file1 file2 ...

    If you wanted text and not lines, you would use

            perl -0777 -ne 'print "$1\n" while /START(.*?)END/gs' file1 file2 ...

    But if you want nested occurrences of "START" through "END", you'll run
    up against the problem described in the question in this section on
    matching balanced text.

    Here's another example of using "..":

            while (<>) {
                    $in_header =   1  .. /^$/;
                    $in_body   = /^$/ .. eof;
            # now choose between them
            } continue {
                    $. = 0 if eof;  # fix $.
            }

--------------------------------------------------------------------

The perlfaq-workers, a group of volunteers, maintain the perlfaq. They
are not necessarily experts in every domain where Perl might show up,
so please include as much information as possible and relevant in any
corrections. The perlfaq-workers also don't have access to every
operating system or platform, so please include relevant details for
corrections to examples that do not work on particular platforms.
Working code is greatly appreciated.

If you'd like to help maintain the perlfaq, see the details in
perlfaq.pod.

--
Posted via a free Usenet account from http://www.teranews.com

On May 24, 9:03 am, PerlFAQ Server <b@stonehenge.com> wrote:

> 6.3: How can I pull out lines between two patterns that are themselves on different lines?

>     You can use Perl's somewhat exotic ".." operator (documented in perlop):

>             perl -ne 'print if /START/ .. /END/' file1 file2

Funny thing, I was rereading about ".." and "..." in perlop and came
to this
part, 'In all other regards, "..." behaves just like ".." does.',
which was
at the end of the "scalar context" paragraph.

I wondered if "In all other regards" included list context and sure
enough:

perl -le 'print for 1...4'
1
2
3
4

I did not know that.  :-)

--
Brad

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc