mail.log 줄의 날짜를 인쇄하세요.

mail.log 줄의 날짜를 인쇄하세요.

나는 mail.log 줄을 가지고 있고 sed와 파이프를 사용하여 이메일의 제목, 보낸 사람, 받는 사람을 추출할 수 있습니다.

echo "Jul 15 09:04:38 mail postfix/cleanup[36034]: 4A4E5600A5DE0: info: header Subject: The tittle of the message from localhost[127.0.0.1]; from=<sender01@mydomain> to=<recipient01@mydomain> proto=ESMTP helo=<mail.mydomain>" | sed -e 's/^.*Subject: //' -e 's/\]//' -e 's/from localhost//' -e 's/^.\];//' |sed -e 's/\[127.0.0.1; //' -e 's/proto=ESMTP helo=<mail.mydomain>//'

출력이 있어요

The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

내가 원하는 출력은

Jul 15 09:04:38 The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

날짜를 추출하여 출력에 추가하려면 어떻게 해야 합니까?

답변1

추악하지만 명령문 시작 부분에 넣으십시오 sed.

 -e 's/^\([[:alpha:]]+ [[:digit:]]+ [[:digit:]]+:[[:digit:]]+:[[:digit:]]+\).*Subject:\(.*\)/\1\2/'

또는 "mail postfix"가 해당 위치의 텍스트에 표시된다는 것을 항상 알고 있는 경우 다음을 사용할 수 있습니다.

 -e 's/^\(.*\) mail postfix.*Subject:\(.*\)/\1\2/'

그리고 다른 변형도 가능합니다. 날짜를 캡쳐하고, 중요하지 않은 부분은 건너뛰고, 아직 처리해야 할 나머지 부분을 다시 캡쳐하는 것이 핵심입니다. 서라운드를 사용 및 캡처 \(하고 \)캡처를 인쇄 하려면 \nn이 특정 캡처의 위치인 경우(첫 번째는 1, 두 번째는 2 등)를 사용합니다.

이제 이것을 알았으므로 모든 개별 지시문(-e)을 제거하고 여러 캡처 그룹을 사용하여 단일 sed표현식으로 줄이는 방법을 알아낼 수 있을 것입니다.

관련 정보