![mail.log 줄의 날짜를 인쇄하세요.](https://linux55.com/image/9446/mail.log%20%EC%A4%84%EC%9D%98%20%EB%82%A0%EC%A7%9C%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%98%EC%84%B8%EC%9A%94..png)
나는 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/'
그리고 다른 변형도 가능합니다. 날짜를 캡쳐하고, 중요하지 않은 부분은 건너뛰고, 아직 처리해야 할 나머지 부분을 다시 캡쳐하는 것이 핵심입니다. 서라운드를 사용 및 캡처 \(
하고 \)
캡처를 인쇄 하려면 \n
n이 특정 캡처의 위치인 경우(첫 번째는 1, 두 번째는 2 등)를 사용합니다.
이제 이것을 알았으므로 모든 개별 지시문(-e)을 제거하고 여러 캡처 그룹을 사용하여 단일 sed
표현식으로 줄이는 방법을 알아낼 수 있을 것입니다.