로그 파일을 구문 분석하고 정규식 역참조를 인쇄합니다.

로그 파일을 구문 분석하고 정규식 역참조를 인쇄합니다.

이메일 주소를 내부 및 외부 로 인쇄하기 위해 구문 분석하고 싶습니다 /var/log/maillog(주로 구성된 DNS RBL에서 오탐지를 신속하게 확인하기 위해).from=<>to=<>

메일 로그 항목은 다음과 같습니다(접미사).

Jun 20 17:27:52 foobarserver postfix/smtpd[15925]: NOQUEUE: reject: RCPT from sbr.nouveauquebec.com[184.22.154.110]: 554 5.7.1 Service unavailable; Sender address [[email protected]] blocked using urired.spameatingmonkey.net; Red listed, see http://spameatingmonkey.com/lookup/nouveauquebec.com; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<sbr.nouveauquebec.com>

내 정규식은

from=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)> to=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)>

나중에 참조할 수 있는 항목을 저장하고 \1인쇄 \2하고 싶습니다. 내가 원하는 것은 출력을 파이프 cat /var/log/maillog하고 각 줄에 정규식을 적용하고 역참조를 출력하는 것입니다.

이를 달성하는 빠른 방법이 있습니까?

답변1

이것은 단순화된 정규식과 탐욕스럽지 않은 수량자를 사용합니다.

perl -ne 's/^.*from=<(.+?@.+?)> to=<(.+?@.+?)>.*$/$1 $2/; print;' /var/log/maillog

답변2

사용sed:

sed -r -n 's/^.* from=<([^>]+)>\s*to=<([^>]+)>.*$/\1 \2/p' /var/log/maillog

관련 정보