【问题标题】:Perl: Regex for reading a log statement [closed]Perl:用于读取日志语句的正则表达式 [关闭]
【发布时间】:2013-07-10 08:53:38
【问题描述】:

我有以下方式的日志:

2013-07-10 17:27:08 +0900 app.log.error.traffic: {"app.log_count":10,"app.log_bytes":9960,"app.log_count_rate":0.5,"app.log_bytes_rate":166.0}

“app.log.error.traffic”部分不会更改,但日期和其他数字会一直更改。也就是说,“2013-07-10”每天都在变化,“08 +0900”也会变化,“app.log.error.traffic:”不会,“app.log_count”也不会变化.

我想制作一个 perl 脚本,如果“app.log_count”旁边的数字超出阈值级别,则会引发警告。

我做了以下:

 #!/usr/bin/env perl         
 use strict;
 use warnings; 
 use utf8;

 my $file_location = "/var/log/app.log" ; 
 my $threshold = 3;        

 open my $infile, "<", $file_location or die("$!: $file_location");
    while (<$infile>) {
      if (/ REGEX /) {
          if ($_ >= $threshold) {
          # warning
          } else {
          # not warning;
          }
      }
  }    

close $infile;

但正如您所见,最重要的部分丢失了。我应该在 REGEX 中输入什么?

【问题讨论】:

  • my $file_location = ; my $threshold = ; 错误
  • 找一个关于正则表达式的教程,一个基本的应该能够教你如何使用正则表达式,如果它失败了,更新你的问题。
  • @Paulchenkiller 我加了一个例子

标签: regex perl


【解决方案1】:

你可以做类似的事情

use strict;
use warnings;

while(<DATA>){
    my ($value) = $_=~ /"app.log_count":(\d+)/;
    print"$value\n"; # will give you 10
}

__DATA__
013-07-10 17:27:08 +0900 app.log.error.traffic: {"app.log_count":10,"app.log_bytes":9960,"app.log_count_rate":0.5,"app.log_bytes_rate":166.0}

【讨论】:

  • 感谢这个 "app.log_count":(\d+) 正则表达式似乎匹配
  • 不需要$_=~app.log应该是app\.log,但我只是在吹毛求疵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多