나는 얻을 필요가있다
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 주소도 포함하는지 여부), 줄에 더 많은 텍스트가 있는지 여부에 따라, 그리고 GNU에 awk
3인수 match()
함수가 있다고 가정하면 다음도 작동할 수 있습니다.
awk '/from=/ {if (match($0,/.*(relay=[^[:space:]]+).*/,a)) printf("%s\n",a[1])}' mail.log
제공된 예제 입력의 경우 출력은 다음과 같습니다.
relay=sender.hostname.com