Hernan Marcelo Salvarezza wrote:
> 
> Hello all, i am parsing a cisco log and i can'nt find the exact
> regexp,following goes the log and the script..
> 
> Jul 25 10:39:12 10.0.0.1 852: 1d23h: %VOIPAAA-5-VOIP_CALL_HISTORY:
> CallLegType 2, ConnectionId 0 0 0 0, SetupTime *10:46:49.143 GMT Thu Jul
> 25 2002, PeerAddress 0051122323223, PeerSubAddress , DisconnectCause 0
> , DisconnectText , ConnectTime *10:47:09.753 GMT Thu Jul 25 2002,
> DisconnectTime *10:47:09.753 GMT Thu Jul 25 2002, CallOrigin 1,
> ChargedUnits 0, InfoType 2, TransmitPackets 0, TransmitBytes 0,
> ReceivePackets 358, ReceiveBytes 7064
> .......
> 
> my $dtgT = '\d|:|\.';
> my $peer = 'PeerAddress';
> my $upT = 'ConnectTime';
> my $downT = 'DisconnectTime';
> my $prefT = '"0051"';
> 
> my $find = qr/$peer\s* ([$prefT](\d+)) .*  \s*$upT\s* ([\*$dtgT]+) .*
> \s*$downT\s* ([\*$dtgT]+) .*  /xo;

If we interpolate the variables we get:

> qr/PeerAddress\s* (["0051"](\d+)) .*
                     ^^^^^^^^
This character class matches _one_ character that is either '"' or '0'
or '5' or '1' but you don't have a quotation mark (") in the data.  You
probably want:

    PeerAddress\s* (0051\d+) .*


>   \s*ConnectTime\s* ([\*\d|:|\.]+) .*
                       ^^^^^^^^^^^
This character class matches one or more characters that is either '*'
or 0-9 or '|' or ':' or '.' but you don't have a vertical bar (|) in the
data.  You probably want:

   \s*ConnectTime\s* \*([\d:.]+) .*


>   \s*DisconnectTime\s* ([\*\d|:|\.]+) .*/xo;
                                            ^
The /o option is not used because when you compile the regular
expression with qr// the variables have already been interpolated.

   \s*DisconnectTime\s* \*([\d:.]+) .*/x;


> This works fine and gives me the following output:
> 0051122323223,16:11:29.482,16:11:29.482
> 
> Now i need to get the first part of the log(Jul 25 10:39:12) with the
> regexp and print it before the number string
> (0051122323223,16:11:29.482,16:11:29.482),so i use the following  regexp
> to do that
> 
> my $find = qr/(.*?) (\d+\.\d+\.\d+\.\d+.\d+.\d+)\s*   /xo
> it works fine and brings this output:
> 
> Jul 23 11:01:45
> Jul 23 11:14:44
> Jul 23 11:14:45
> 
> but it does'nt work when i put the two regexps together
> 
> my $find = qr/(.*?) (\d+\.\d+\.\d+\.\d+.\d+.\d+)\s* $peer\s*
> ([$prefT](\d+)) .*  \s*$upT\s* ([\*$dtgT]+) .* \s*$downT\s* ([\*$dtgT]+)
> ..*  /xo;


my $find = qr/(\S+\s+\d+\s+[\d:]+)     .*?
              \s*$peer\s*    (0051\d+) .*?
              \s*$upT\s*   \*([\d:.]+) .*?
              \s*$downT\s* \*([\d:.]+)  /x;



John
-- 
use Perl;
program
fulfillment

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

Reply via email to