in reply to Re: 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

Thanks, that helps but I am not sure how to write the logic for my commented out sudo code: # Grab all strings that contain this regex # Save them all in $out Thanks :)
  • Comment on Re^2: script to grab string from log and print them in a different log

Replies are listed 'Best First'.
Re^3: script to grab string from log and print them in a different log
by liverpole (Monsignor) on Feb 01, 2007 at 16:10 UTC
    Oh, sorry ... didn't see that! :-/

    Try this:

    # Find lines starting with "_ and ending with ". my $MAL = '^"_.*"$';

    Read up on perlretut for a good beginning guide to regular expressions.


    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
      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 :)
        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$..$/