获取 postfix 邮件日志中唯一发件人(来自=)域的列表

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

我目前正在尝试从

maillog
中提取所有发件人域。我可以使用以下命令执行其中一些操作,但输出并不完全是我想要的。从邮件日志中检索发件人域的唯一列表的最佳方法是什么?

grep from= /var/log/maillog |
awk '{print $7}' |
sort | uniq -c | sort -n

输出:

1 from=<[email protected]>,
1 from=<[email protected]>,
2 from=<[email protected]>,
2 from=<[email protected]>,
12 reject:
666 from=<>,

所需输出:

test.com
app1.com
example.com
awk grep postfix-mta logfile mail-server
2个回答
1
投票

参见无用的使用

grep
;如果您无论如何都使用 Awk,则根本不需要
grep

awk '$7 ~ /from=.*@/{split($7, a, /@/); ++count[a[2]] }
  END { for(dom in count) print count[dom], dom }' /var/log/maillog

count
收集到关联数组中也无需调用
sort
uniq
。显然,如果您不关心计数,请不要在最后打印
count[dom]


0
投票

这应该给你答案:

grep from= /var/log/maillog | awk '{print $7}' | grep -Po '(?=@).{1}\K.*(?=>)' | sort -n | uniq -c

...将最后一项更改为“| sort | uniq”以删除计数。


参考资料:

https://www.baeldung.com/linux/bash-remove-first-characters {1}\K 使用

使用 grep 或 sed 从日志中提取电子邮件地址 -Po grep 函数

© www.soinside.com 2019 - 2024. All rights reserved.