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


All i need to extract certain data from a log file
The data is shown below

Sat Jun 4 05:56:00 BST 2005 INFO: PD/ZVKK Load: Starting.

So i was looking for some help on a regex that could assign a
variable to each of the entried in that line

so something like my($first,$second) = /

so first would - Sat.

Replies are listed 'Best First'.
Re: Log file regex
by polettix (Vicar) on Jun 07, 2005 at 10:53 UTC
    Please look at How do I post a question effectively?, aka "How (Not) To Ask A Question". It's really unclear what you're looking for.

    If you are happy to separate your fields upon spaces:

    $line = 'Sat Jun 4 05:56:00 BST 2005 INFO: PD/ZVKK Load: Starting.'; my @fields = split / /, $line;
    Now, @fields[0] contains 'Sat', @fields[1] contains 'Jun' and so on.

    Flavio (perl -e 'print(scalar(reverse("\nti.xittelop\@oivalf")))')

    Don't fool yourself.
Re: Log file regex
by aukjan (Friar) on Jun 07, 2005 at 10:35 UTC
    Have you tried anything yourself?? Please show some code, so we can help!.

    .:| If it can't be fixed .. Don't break it |:.

      I second the motion. Not even trying gets a big thumbs down.

      Perhaps your question should have been "where can I find a tutorial on regular expressions?" in which case I might have answered Perl Regular Expressions.

Re: Log file regex
by salva (Canon) on Jun 07, 2005 at 10:49 UTC
    take a look at Regexp::Log, it allows to generate parametrizable regular expressions for log file parsing from a description of the fields inside.

    Creating modules for new formats is very easy, just use one of the existant submodules (i.e. Regexp::Log::Common) as a template.

Re: Log file regex
by jpeg (Chaplain) on Jun 07, 2005 at 11:28 UTC
    if you're just trying to grab 'entries' like Sat, Jun, 4, etc, you don't even need a regex. Look at perldoc -f split.

    regexes are great, but there's way more to perl than regexes, and in my opinion, not the best way to start learning perl.

    --
    jpg
Re: Log file regex
by tlm (Prior) on Jun 07, 2005 at 10:50 UTC

    I'm sure that what you want to do (whatever it is) is eminently feasible. :-) I recommend this for starters.

    the lowliest monk

Re: Log file regex
by joelnackman (Beadle) on Jun 07, 2005 at 13:43 UTC
    If you use /^(.*)?:+\s(.*)?:+\s(.*)$/, then you will be able to use the variables $1, $2, $3 to access the different parts of the string. For example, try using this code:
    $data = 'Sat Jun 4 05:56:00 BST 2005 INFO: PD/ZVKK Load: Starting.'; if ($data =~ /^(.*)?:+\s(.*)?:+\s(.*)$/) { # $1 contains the string 'Sat Jun 4 05:56:00 BST 2005 INFO' # $2 contains the string 'PD/ZVKK Load' # $3 contains the string 'Starting' }
    Another way to do it is with split, which still involves a regex, but a much simpler one. Here is some code:
    $data = 'Sat Jun 4 05:56:00 BST 2005 INFO: PD/ZVKK Load: Starting.'; @fields = split /:+\s/, $data; # $fields[0] is 'Sat Jun 4 05:56:00 BST 2005 INFO' # etc...
    I agree, however, with the others. Next time, show some code.