Thanks for the suggestion. I think that comes close to what I'm trying to achieve. Problem is that the "exit" doesn't allow me to continue with further grepping of the input stream.

Here's a more complete snippet of the shell script that I'm using, showing that I'm just trying to use Perl to grep the incoming data stream (in paragraph mode).
#! /bin/sh ## other stuff happens here, but snipped for clarity scdir=/var/log find $scdir -type f -name "nts_*.bz2" | # find interesting files in + $scdir perl -wnl -e '7 > -M and print;' | # ignore old files xargs bzcat -k | # unpack contents to STDOUT perl -wn00 -e ' # paragraph mode m[kernel\.hostname\s.\s(.*?)\n] and print "Hostname:\t$1\n"; # +grep for hostname m[\/bin\/date\n(.*?)\n] and print "Generated:\t$1\n"; # grep fo +r date ## I grep for other stuff here, but snipped for clarity m[Settings.for\s(.*?):\n] and print "Interface:\t$1\n"; # g +rep for eth interfaces m[Speed:\s(.*?)Mb\/s] and # grep for interface spee +d print "\ -speed:\t$1Mb\/s\n" ; m[Duplex:\s(.*?)\n] and # grep for interface duplex print "\ -duplex:\t$1\n" ; m[Auto-negotiation:\s(.*?)\n] and # grep for interface +autoneg print "\ -autoneg:\t$1\n" ; m[cpuinfo\nvendor_id\s+:\s(.*?)\n] and # grep for cpu id print "CPU:\t\t$1\n" ; ' exit $!

The output is something like the following:
Generated: Tue Dec 4 12:12:01 GMT 2007 Hostname: lnx0010 CPU: IBM/S390 CPU: IBM/S390 Interface: hsi0 -speed: 100Mb/s -duplex: Full -autoneg: on Interface: hsi1 -speed: 100Mb/s -duplex: Full -autoneg: on Interface: sit0 -speed: 100Mb/s -duplex: Full -autoneg: on CPU: IBM/S390 Generated: Mon Dec 3 12:34:19 GMT 2007 Hostname: ptsuse3 CPU: GenuineIntel Interface: eth0 -speed: 100Mb/s -duplex: Full -autoneg: on Interface: eth1 -speed: 100Mb/s -duplex: Full -autoneg: on Generated: Mon Jun 18 15:33:40 BST 2007 Hostname: icore-71 CPU: GenuineIntel CPU: GenuineIntel Interface: eth0 -speed: 100Mb/s -duplex: Half -autoneg: on

You'll notice that there are several "CPU:" lines -- and that's because there are several occurences of the following 2-line string in the input stream:
# /proc/cpuinfo vendor_id : IBM/S390

I'm wanting to quit after matching the first occurence of that string, but to continue with my other "grep" statements.

I'm new to Perl, so am open to criticism of my general approach to this problem.

In reply to Re^2: Grepping with Perl: How to stop after first match? by paulnovl
in thread Grepping with Perl: How to stop after first match? by paulnovl

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.