In article <[EMAIL PROTECTED]>, Rob Dixon wrote:

> Pandey Rajeev-A19514 wrote:
>>
>> Rob ANderson wrote:
>> >
>> > Pandey Rajeev-A19514 wrote:
>> > >
>> > > In short, I have a defined set of pattern that can occur across any
>> > > number of lines(scalars) in a buffer (array of scalars)
> and I need to print only those lines(Scalars) that contain the full or
> partial pattern. For eg. For the buffer @buff (as shown below), I have to
> find out the occurance of "FastEthernet" and "down".
>> > >
>> > > I have pasted a code below :
>> > > I join the buffer to make a Scalar and then search for the pattern.
>> > >
[...]
>> > > Now, that the match has been found, I just want to print only those
>> > > scalars in @buff which contains the specified pattern.
>> > >
>> > > The print should be
>> > > ifEntry.2.13 = FastEthernet3/9
>> > > lifEntry.20.13 = administratively down

[...]

Or if you don't need the lines in between the first and second match (as in 
Rob's example), then maybe a "state-machine"-like marker (I saw an article 
recently about state machines) will help. John W. Krahn justed posted 
something similar I think...

my $match = '';

while (<DATA>) {
   if (/.*FastEthernet.*/) {
      $match = 1;
      print $_;
   }
   if (/.*administratively down.*/ and $match) {
      print;
      $match = '';
   }
}
__DATA__
Jul  5 03:22:29.635 cst: SNMP: 10.1.0.1 queue overflow, dropping packet
ifEntry.1.13 = 13
ifEntry.2.13 = FastEthernet3/9
ifEntry.3.13 = 6
lifEntry.20.13 = administratively down
ifEntry.2.13 = FastEthernet3/9
ifEntry.3.13 = 6
lifEntry.20.13 = administratively down

This produces:
ifEntry.2.13 = FastEthernet3/9
lifEntry.20.13 = administratively down
ifEntry.2.13 = FastEthernet3/9
lifEntry.20.13 = administratively down

But your example only printed one of these, so I'm not sure if that is what 
you wanted.

-K

-- 
Kevin Pfeiffer
International University Bremen

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to