简体   繁体   English

从文本文件打印匹配行的 Perl 脚本

[英]Perl script to print the matching line from a text file

Text file lines:文本文件行:

2018-03-02 10:56:06,808 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] XMLGenerator TLS ID size 142392_REQ_2018-03-02T09-53-18-991+10-00:3561
2018-03-02 10:56:02,074 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] XMLGenerator TLS ID size 142401_REQ_2018-03-02T09-53-20-607+10-00:1444
2018-03-02 10:56:02,074 INFO  [com.server.hdmi.xmlgenerator.XMLGenerator] Exit createDOMTreefromXMLGenerator
2018-03-02 10:56:02,074 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] generating file for TranID:142401:D:/InterfaceData/Address\142401_RESP_2018-03-02T10-55-35-035+10-00.xml

My script:我的脚本:

my $LogDir = '\\\\server\\ddrive\support\purushoth\log';
    if(-e $LogDir)

    {                       
        opendir(DIR, $LogDir);
        while (defined(my $file = readdir (DIR)))   
        {           
            if ($file =~ m/server/i)
            {
            my $fullfilename = $LogDir."\\".$file;
            my @logFileLines = ();
            open (LOGFILE, "$fullfilename") or die "Could not open file";
                {
                    @logFileLines = <LOGFILE>;

                }
                close(LOGFILE);

                my $temp2 = 0;
                foreach my $line1 (@logFileLines)
                {
                    chomp($line1);      
                    if ( $line1 =~ (m!/^(\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2})\s+.*XMLGenerator\s+TLS\s+ID\s+size\s+/.*\$!);
                    {
                    print "the line match in the server log:  $line1\n";
                    }
                 }            
            }
        }
    }

From the log file, I want to print only matching lines like this.从日志文件中,我只想打印这样的匹配行。 I tried with my script, but it's not working.我试过我的脚本,但它不起作用。

2018-03-02 10:56:06,808 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] XMLGenerator TLS ID size 142392_REQ_2018-03-02T09-53-18-991+10-00:3561

Please help me to read such lines and print it.请帮我阅读这些行并打印出来。 And also i want to assign the last part of this line.而且我想分配这一行的最后一部分。

142392_REQ_2018-03-02T09-53-18-991+10-00:3561

If the issue is with the regular expression, then here's the small sample with the correctly working one:如果问题出在正则表达式上,那么这里是一个正确工作的小样本:

#!/usr/bin/perl
my @lines = (
    '2018-03-02 10:56:06,808 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] XMLGenerator TLS ID size 142392_REQ_2018-03-02T09-53-18-991+10-00:3561',
    '2018-03-02 10:56:02,074 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] XMLGenerator TLS ID size 142401_REQ_2018-03-02T09-53-20-607+10-00:1444',
    '2018-03-02 10:56:02,074 INFO  [com.server.hdmi.xmlgenerator.XMLGenerator] Exit createDOMTreefromXMLGenerator',
    '2018-03-02 10:56:02,074 DEBUG [com.server.hdmi.xmlgenerator.XMLGenerator] generating file for TranID:142401:D:/InterfaceData/Address\142401_RESP_2018-03-02T10-55-35-035+10-00.xml'
);

foreach my $line (@lines) {
    if ($line =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*XMLGenerator TLS ID size (.*)/) {
        print "Timestamp: $1, TLS ID: $2\n";
    } elsif ($line =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*generating file for.*\\(.*)/) {
        print "Timestamp: $1, filename: $2\n";
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM