从 EXIM 日志中提取数据
Extract data from EXIM log
我已经按照以下格式登录
2018-11-11 06:02:32 1gLkhU-002yf9-3G <= email@domain.com H=(netserver.br - 2.15.2.2 -) [127.0.0.1]:48270 P=esmtpsa X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=no A=dovecot_plain:my@dom.com S=3209 T="test" for my@gmail.com
我只需要从上面的行示例中提取这个并且完全按照这个格式
email@domain.com my@dom.com
注意:dovecot_plain:有时可能只是一个用户名(不是完整的电子邮件)
我正在使用这个
grep "dovecot_plain:" /var/log/exim_mainlog | egrep -a -E -io " [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4} | A=dovecot_plain:[A-Z0-9.@_%+-]{1,100}"
但它没有按我的需要工作,因为它返回了这个
email@domain.com
A=dovecot_plain:my@dom.com
分两行...
知道如何以这种格式准确提取吗?
email@domain.com my@dom.com
p.s。我还需要在 EXIM 日志中提取最近 6 小时的数据,你认为这可能吗?
谢谢
awk 来拯救
grep "dovecot_plain:" /var/log/exim_mainlog | awk 'BEGIN{min_timestamp=systime() - 6*60*60}{datetime= " " ; gsub(/-|:/," ", datetime); timestamp=mktime(datetime)}timestamp>=min_timestamp{split(,s,":"); print , s[2]}'
Returns
email@domain.com my@dom.com
仅当日志时间 >= 系统时间 - 6 小时
编辑
@tripleee 建议的纯 awk 解决方案
awk 'BEGIN{min_timestamp=systime() - 6*60*60}/dovecot_plain:/{datetime= " " ; gsub(/-|:/," ", datetime); timestamp=mktime(datetime) ; if(timestamp>=min_timestamp){split(,s,":"); print , s[2]}}' /var/log/exim_mainlog
我已经按照以下格式登录
2018-11-11 06:02:32 1gLkhU-002yf9-3G <= email@domain.com H=(netserver.br - 2.15.2.2 -) [127.0.0.1]:48270 P=esmtpsa X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=no A=dovecot_plain:my@dom.com S=3209 T="test" for my@gmail.com
我只需要从上面的行示例中提取这个并且完全按照这个格式
email@domain.com my@dom.com
注意:dovecot_plain:有时可能只是一个用户名(不是完整的电子邮件)
我正在使用这个
grep "dovecot_plain:" /var/log/exim_mainlog | egrep -a -E -io " [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4} | A=dovecot_plain:[A-Z0-9.@_%+-]{1,100}"
但它没有按我的需要工作,因为它返回了这个
email@domain.com
A=dovecot_plain:my@dom.com
分两行...
知道如何以这种格式准确提取吗?
email@domain.com my@dom.com
p.s。我还需要在 EXIM 日志中提取最近 6 小时的数据,你认为这可能吗?
谢谢
awk 来拯救
grep "dovecot_plain:" /var/log/exim_mainlog | awk 'BEGIN{min_timestamp=systime() - 6*60*60}{datetime= " " ; gsub(/-|:/," ", datetime); timestamp=mktime(datetime)}timestamp>=min_timestamp{split(,s,":"); print , s[2]}'
Returns
email@domain.com my@dom.com
仅当日志时间 >= 系统时间 - 6 小时
编辑
@tripleee 建议的纯 awk 解决方案
awk 'BEGIN{min_timestamp=systime() - 6*60*60}/dovecot_plain:/{datetime= " " ; gsub(/-|:/," ", datetime); timestamp=mktime(datetime) ; if(timestamp>=min_timestamp){split(,s,":"); print , s[2]}}' /var/log/exim_mainlog