Hi, 

Murphy, Ged (Bolton) <[EMAIL PROTECTED]> asked:

> I have a log containing strings as follows :
> 
>  21259 audit    O      72398 Mar 09 00:18 dll/ldr/elf.c
> 
> The format is the same throughout with the exception of the 
> 'O', as it doesn't always appear.
> I need to match when the 'O' appears and when it does, I need 
> to save the file path, i.e. 'dll/ldr/elf.c'
> 
> Here is a snippet from my code containing my regex
> 
> if (/\sO\s.+([\w\/]+)$/) {
>    print "found $1\n";
> ...
> 
> However it's not working as expected, I assume due to the 
> '.+' matching too much.
> Can someone help with the best method to do this?

Off the top of my head I'd say you should try

  /^\d+\s+\S+\s+O.*?\s+(\S+)\s*$/

Alternatively, you could split() the string at the whitespace:

  my @fields = split /\s+/, $line;

  if( $fields[2] eq 'O' ){
    print "found $fields[-1]\n";
  }

I haven't benchmarked this, but I'd assume it would be a bit
faster than using a RE.

Of course that only works if you can be sure that there will be
not whitespace in the filename.

HTH,
Thomas

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to