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

Hi Monks, Here is my piece of code, Inside a loop i am calling this--
if($line =~ /Auth\s+failed.*/) { $ErrorMsg=$1; printf "Failure,"; while ( $line = <$log> ) { if ($line =~ /ArAuthFrameworkImpl::doPostAuth.*Authent +ication\s*mechanism\s*returned\s*\[(\d+)\]/) { printf FP_OUT "${1}, $ErrorMsg\n"; return; } } }
here is the log snippet--
Arcot Native Server: recvd AA_BIN_MSG_VER_CHG Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: Cert Subject String....:[ UserID=123456; Card +Name=CARD] Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: Cert issuer............: Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: Cert serial String.....:[75fa] Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: ArcotException verifying Arcot challenge: [Ar +cot Exception,Certificate expired or not yet valid: certificate expir +ed or not yet valid in ArcotVerifier], Challenge verification failed +for Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: ApricotID Credential Expired. serial : [75fa] Wed May 20 05:22:58.368 2009 Morocco Standard Time INFO: pid 2172 t +id 3412: 170: 10106934: Auth failed due to Account Verification(seria +l Number [75fa])
in $Error_Msg i want to capture the line "ApricotID Credential Expired". I just want to know how to capture the previous line of the matching string. Thanks NT

Replies are listed 'Best First'.
Re: grep previous line of the matched string
by Transient (Hermit) on Jul 02, 2009 at 16:36 UTC
    my $prev_line = ""; while ( my $line = <$log> ) { if ( $line =~ /Auth\s+failed./ ) { ... # error message should be in $prev_line } $prev_line = $line; }