我需要获取
relay=sender.hostname.com
来自下面的 Sendmail 日志示例。
sendmail[0000]: 03O7cddddddd: from=<[email protected]>, size=782, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=sender.hostname.com [10.0.0.73]
答案1
我可以使用以下命令来做到这一点。
grep "from=" mail.log | sed 's/.*relay=//'
使用以下 cmd 排序并选择前 10 个。
grep "from=" mail.log | sed 's/.*relay=//' | sort | uniq -c |sort -nr -k 1 | head -10
答案2
根据您的输出需要的“选择性”程度(即是否[ ... ]
还包括尾部 IP 地址),以及该行是否可能有更多文本,并假设 GNUawk
具有 3 参数match()
函数,以下内容也可以工作:
awk '/from=/ {if (match($0,/.*(relay=[^[:space:]]+).*/,a)) printf("%s\n",a[1])}' mail.log
对于提供的示例输入,输出为
relay=sender.hostname.com