如何解析 Dante 日志文件

问题描述 投票:0回答:3

我有一个但丁袜子日志文件,并试图找到一种方法来解析获取两个部分并用分号分隔它们。

日志文件包含:

Sep 11 03:02:00 (1568505720.145620) danted[10402]: info: pass(2): tcp/connect -: pam.username%[email protected] 123.12.12.112.1080 -> 123.12.12.112.48198 111.123.123.147.443 (319721)
Sep 11 03:02:00 (1568505720.147471) danted[10402]: info: pass(2): tcp/connect -: pam.username%[email protected] 123.12.12.112.1080 -> 123.12.12.112.37449 123.123.123.211.443 (312)
Sep 11 03:02:00 (1568505720.148240) danted[10402]: info: pass(2): tcp/connect -: 111.123.123.147.443 123.12.12.112.48198 -> 123.12.12.112.1080 pam.username%[email protected] (723)
Sep 11 03:02:00 (1568505720.154784) danted[10402]: info: pass(2): tcp/connect -: 123.123.123.211.443 123.12.12.112.37449 -> 123.12.12.112.1080 pam.username%[email protected] (8831)

基本上,我想在 pam.username% 之后获取两个括号内的用户名和数据速率,例如 8831,所以最终结果如下:

MyUsername;319721
MyUsername;312
MyUsername;723
MyUsername;8831

我想 awk 和 sed/regex 知识在那时会很棒。

提前致谢,

regex awk sed logparser
3个回答
1
投票

Perl 方式:

perl -ane 's/^.+?pam\.username%([^@]+).+?\((\d+).*$/$1;$2/;print' file.log
MyUsername;319721
MyUsername;312
MyUsername;723
MyUsername;8831

0
投票

尝试使用以下正则表达式:

pam\.username%([A-Za-z0-9]+)@|\s\(([0-9]+)\)

正则表达式演示

说明:

pam\.username%([A-Za-z0-9]+)@  # Match any A-Za-z0-9 between pam.username% and @ - Group 1
|                              # Or
\s\(([0-9]+)\)         # Match any digits between parenthesis following a whitespace - Group 2

通过组 1 访问用户名,通过组 2 访问数据速率。


0
投票

使用GNU

awk
及其
gensub
功能,请尝试以下操作。

awk '
BEGIN{
  regex=".*(pam.username%[^@]*).*\\((.*)\\)"
}
{
  val=gensub(regex, "\\1;\\2","1",$0)
  sub(/[^%]*%/,"",val)
  print val
}
'  Input_file
© www.soinside.com 2019 - 2024. All rights reserved.