Exim - exigrep 출력에서 ​​EOL에 대한 마커는 무엇입니까?

Exim - exigrep 출력에서 ​​EOL에 대한 마커는 무엇입니까?

나는 이와 같은 exigrep 출력을 가지고 있습니다.

2019-02-02 17:03:00 1gpxky-0005ky-Mk <= [email protected] U=XXXXX P=local S=14529 [email protected] T="XXXXXXXXX" for [email protected]
2019-02-02 17:03:00 1gpxky-0005ky-Mk Sender identification U=XXXXX D=XXXXX.com [email protected]
2019-02-02 17:03:00 1gpxky-0005ky-Mk SMTP connection outbound 1549123380 1gpxky-0005ky-Mk XXXXX.com [email protected]
2019-02-02 17:03:01 1gpxky-0005ky-Mk => [email protected] R=dkim_lookuphost T=dkim_remote_smtp H=gmail-smtp-in.l.google.com [XXX.XXX.XXX.XXX] X=TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128 CV=yes C="250 2.0.0 OK 1549123381 m21si11695854lfc.90 - gsmtp"
2019-02-02 17:03:01 1gpxky-0005ky-Mk Completed

2019-02-02 15:48:22 1gpwaj-00081N-5J H=mx2.XXXXX.pl [XX.XX.XX.XX]:15240 Warning: "SpamAssassin as takapara detected message as NOT spam (2.4)"
2019-02-02 15:48:22 1gpwaj-00081N-5J H=mx2.XXXXX.pl [XX.XX.XX.XX]:15240 Warning: Message has been scanned: no virus or other harmful content was found
2019-02-02 15:48:22 1gpwaj-00081N-5J <= [email protected] H=mx2.XXXX.pl [XX.XX.XX.XX]:15240 P=esmtp S=72014 id=9c38a455-1b57-404a-ae68-87ed816473a8 T="XXXXXXXXXX" for [email protected]
2019-02-02 15:48:23 1gpwaj-00081N-5J => XXXX <[email protected]> R=virtual_user T=dovecot_virtual_delivery C="250 2.0.0 <[email protected]> +A/zNratVVyfaQAADQHPYA Saved"
2019-02-02 15:48:23 1gpwaj-00081N-5J Completed

나는 이것들 중 몇 가지를 가지고 있습니다. 그러나 awk 정규식 스타일 "grep"을 수행한 후에는 모든 이메일 주소를 얻습니다(단일 "청크" 출력 중간에도 - 예제의 두 번째 출력).

나는 awk를 사용하여 첫 번째 줄과 다섯 번째 줄(발신자 이메일 주소 wo가 내 서버에 있음)로 이동했지만 \n작동하지 않습니다.

나는 이 코드를 가지고 있습니다 :

# cat /var/log/exim_mainlog | grep 2019-02-02 | exigrep {user_name} | awk '/^([0-9]*-[0-9]*-[0-9]*) ([0-9]*:[0-9]*:[0-9]*) ([0-9a-zA-Z]*-[0-9a-zA-Z]*-[0-9a-zA-Z]*) (<=).*\n/ {print $5}'

여기서 EOL은 어떻게 정의됩니까?

답변1

awk그리고grep줄 끝 표시로 "$"를 사용합니다(POSIX 정규 표현식의 기능). \n그것의 일부도 아니다기본 정규식(grep의 기본값) 또는확장 정규식(grep의 경우 옵션, awk의 경우 표준)

바라보다9.3.8 BRE 표현 고정:

<dollar-sign>( '$' )는 전체 BRE의 마지막 문자로 사용될 때 앵커가 되어야 합니다. 이 구현은 다음을 처리할 수 있습니다.<dollar-sign>하위 표현식의 마지막 문자로 사용될 때 앵커로 사용됩니다. 이것<dollar-sign>표현식(또는 선택적 하위 표현식)은 일치하는 문자열의 끝에 고정되어야 합니다.<dollar-sign>마지막 문자 이후 문자열의 끝과 일치한다고 할 수 있습니다.

의견에서 - awk에서 첫 번째 일치 항목을 인쇄하려면 블록을 사용하여 이와 같은 작업을 수행할 수 있습니다.

{print $5}

다음으로 교체

{if (found) next; found = 1; print $5; }

답변2

위에서 언급한 명령이 작동해야 합니다.

awk 'NR==1{print $5}' filename

관련 정보