On Fri, Aug 15, 2008 at 9:03 AM, Chris Charley <[EMAIL PROTECTED]> wrote:
> On Wed, Aug 13, 2008 at 10:05 AM, John W. Krahn <[EMAIL PROTECTED]> wrote: >> >> Kashif Salman wrote: >>> >>> Greetings, >>>> >>>> >>> Hello, >>> >>> I have a log file like so, and I am trying to get the date on the next >>> >>>> line >>>> after "Start..." line. So for the log below I'd like to get the output >>>> >>>> 04/06/05 >>>> 05/06/05 >>>> 06/06/05 >>>> >>>> But I also need to re-format that so the end result becomes: >>>> >>>> 2005-04-06 >>>> 2005-05-06 >>>> 2005-06-06 >>>> >>>> Any hints? >>>> >>>> >>> while ( <> ) { >>> /^Start/ && <> =~ /^(\d+)\/(\d+)\/(\d+)/ && print "20$3-$1-$2"; >>> } >>> >>> >>> John >>> >> > >> /^Start/ && <> =~ /^(\d+)\/(\d+)\/(\d+)/ && print "20$3-$1-$2"; >> >> >> I understand most of what is going on in the above line except the " && <> >> " >> part. Can somebody please explain that? Somehow it searches for "Start" in >> the beginning of the line and gets the date from the next line. >> >> > The <> operator is in scalar context, so it reads the next line (after > Start) *and* performs a match on that line. In the match, it captures 3 > groups of your date digits and, if the match succeeds, prints them out in > the form yyyy-mm-dd. > > $1 is the first captured digits, $2 is the second capture, etc. > > Hope this helps, > Chris > > How can I capture "Start" as well? putting brackets around it like so doesn't work: /^(Start)/ && <> =~ /^(\d+)\/(\d+)\/(\d+)/ && print "$1=> 20$4-$2-$3"; I know it seems pointless to capture start but it doesn't always say "Start" so I want to capture it. for simplicity lets keep it "Start" and try to capture it.