in reply to Re^3: script to grab string from log and print them in a different log
in thread script to grab string from log and print them in a different log

OK, this is looking much better now...unfortunately it isn't printing anything in my backup.txt file... Here's what I have:
use strict; use warnings; my $out = "Backup/backup.txt"; my $logfile="log.txt"; my $MAL = '^"_.*"$'; my $logfile_new; open LOG, "<", $logfile or die "Cannot open $logfile for read :$!"; open OUT, ">$out" or die "Cannot open $out for write :$!"; while ( <LOG> ) { if ( $_ =~ /$MAL/i ) { print OUT $_; } }
Thanks :)
  • Comment on Re^4: script to grab string from log and print them in a different log
  • Download Code

Replies are listed 'Best First'.
Re^5: script to grab string from log and print them in a different log
by liverpole (Monsignor) on Feb 01, 2007 at 16:23 UTC
    Is it possible you don't have any matching lines?  Perhaps there's some whitespace at the beginning or end of the lines you want to match?

    This regex will match whitespace at the beginning and end of the line:

    # Find lines starting with "_ and ending with ", and containing option +al # leading or trailing whitespace. # my $MAL = '^\s*"_.*"\s*$';

    If this still doesn't help you, try logging the lines which DON'T match:

    use strict; use warnings; my $out = "Backup/backup.txt"; my $out2 = "nomatch.txt"; my $logfile = "log.txt"; my $MAL = '^\s*"_.*"\s*$'; open LOG, "<", $logfile or die "Cannot open $logfile for read :$!"; open OUT, ">$out" or die "Cannot open $out for write :$!"; open OUT2, ">$out2" or die "Cannot open $out2 for write :$!"; while ( <LOG> ) { if ( $_ =~ /$MAL/i ) { print OUT $_; } else { print OUT2 $_; } }

    Then you can see if your logging mechanism is to blame, or whether there's some other reason that the lines you expect to match don't actually match, by checking what (if anything) gets written to "nomatch.txt".


    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
      OK, that really helps :) Basically, it's still not working correctly because it's still not matching anything (nomatch.txt holds a backup of the entire log.) However, I'm sure we can figure this out... I would like to match all strings in this document that start with "MAL_ and end with a single quote " I have this regex but it doesn't seem to be working:
      my $MAL = '^\s*"MAL_.*"\s*$';
        Okay, I think I understand your requirements better.

        How about the following ...?

        my $MAL = '"MAL_[^"]*"'; while ( <LOG> ) { while ( $_ =~ /$MAL/gi ) { print OUT $_; } }

        Now the regex is matching "MAL_ anywhere in the string, and ending with the matching quotation mark ", but containing no quotes in between.  The regular expression substring [^"] means "a character which isn't a quotation mark", and [^"]* means "any number of non-quotation mark characters".

        Is that what you want?


        s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
Re^5: script to grab string from log and print them in a different log
by davorg (Chancellor) on Feb 01, 2007 at 16:20 UTC