This script may take a while to run, especially on a busy podmaster.
Generating Syslog TopN list on node for last 3 hours.
Top 5 hosts for Day: Oct8 between 02:00:00 and 02:59:59
Rank Number of Alerts Host
---- ---------------- ----
1 3124 aaa
2 2294 bbb
3 2157 ccc
4 832 ddd
5 816 eee
Top 5 hosts for Day: Oct8 between 01:00:00 and 01:59:59
Rank Number of Alerts Host
---- ---------------- ----
1 5495 fff
2 2625 ggg
3 998 hhh
4 752 iii
5 741 jjj
Top 5 hosts for Day: Oct8 between 00:00:00 and 00:59:59
Rank Number of Alerts Host
---- ---------------- ----
1 2747 kkk
2 876 lll
3 780 mmm
4 724 nnn
5 309 ooo
我使用下面的正则表达式来匹配这种格式。
\s+[1]+\s+([\d]+).*
上面表达式的输出是
$1 = 3124 5495 2747
但是我需要正则表达式来分别匹配排名1。
Example output:
$1 = 3124
$2 = 5495
$3 = 2747
请帮我解决一下。
答案 0 :(得分:2)
你的正则表达式没有错。
这只是一种格式差异:
use strict;
use warnings;
my $data = do {local $/; <DATA>};
my @ones = $data =~ m/^\s*[1]\s+([\d]+)/mg;
for my $i (0..$#ones) {
printf "\$%d = %s\n", $i+1, $ones[$i];
}
__DATA__
Rank Number of Alerts Host
---- ---------------- ----
1 3124 abc
2 2294 bcd
Rank Number of Alerts Host
---- ---------------- ----
1 5495 cdf
2 2625 klm
Rank Number of Alerts Host
---- ---------------- ----
1 2747 lll
2 876 jjj
输出:
$1 = 3124
$2 = 5495
$3 = 2747
答案 1 :(得分:1)
如果输入包含您发布的确切字符串,请将正则表达式更改为以下内容。
(?s)\s+1+\s+([\d]+).*?\s+1+\s+([\d]+).*?\s+1+\s+([\d]+)
对于javascript,
\s+1+\s+([\d]+)[\S\s]*?\s+1+\s+([\d]+)[\S\s]*?\s+1+\s+([\d]+)
答案 2 :(得分:0)
答案 3 :(得分:0)
我们正在使用新的IPsoft工具,它有两个选项。
1. Line Filter(JavaScript regex) 2. Match(JavaScript regex)
例如,如果我们需要匹配alertcount(3124)。首先过滤行&gt;然后匹配相同的行。就像我需要匹配另外两个警报计数(5495&gt;和2747)。请帮我解决一下。
如果您尝试从主机命令状态或任何状态的OUTPUT变量捕获输出,则可以使用“提取变量”选项卡:
Name: capture_variable
Line Filter: \s+1\s+.*
Match: .*1\s+(\d+).*
Replace: $1
这会将capture_variable设置为等于多行字符串,如下所示:
3124
5495
2747