이메일 주소를 내부 및 외부 로 인쇄하기 위해 구문 분석하고 싶습니다 /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