로그 파일의 각 줄 끝에 "\n"을 추가하는 방법

로그 파일의 각 줄 끝에 "\n"을 추가하는 방법

저는 msmtp를 사용하여 회사에 설정한 일부 RPi 키오스크에 이메일 알림을 생성하고 있습니다. 불행하게도 이메일 알림에 로그 파일의 마지막 5줄을 포함하려고 하면 msmtp가 줄 바꿈을 올바르게 처리하지 못하고 오류가 발생합니다. 모든 것 한 줄의 텍스트로 인쇄합니다. 로그 파일의 모든 줄에 \n이 포함되어 있으면 이메일 경고에 올바르게 출력됩니다.

이 명령의 기본 예는 다음과 같습니다.

echo -e "This is a test. $(tail -5 /var/log/syslog)" | msmtp @domain

syslog를 에코하지만 msmtp개행 문자를 처리할 수 없는 것처럼 보이기 때문에 모두 텍스트로 둘러싸여 있습니다. syslog를 수동으로 편집하고 \n각 줄의 끝에 추가하면 올바르게 인쇄됩니다.

\n로그 파일의 각 줄 끝에 추가할 sed 또는 awk 의 올바른 구문은 무엇입니까?

답변1

이것은 매우 간단합니다. 입력은 msmtp헤더와 본문이 포함된 올바른 형식의 이메일 메시지여야 합니다. 결국 /usr/{bin,lib}/sendmail, 헤더를 본문에서 분리하지 않았거나 실제로 헤더를 전혀 생성하지 않았습니다. 귀하의 syslog 라인은 (매우 이상한) 헤더로 처리됩니다.

머리글. 새로운 팀. 몸. 그것을 생성하십시오.

답변2

내 생각에는 메일 도구가 기다리고 있는 것 같습니다 \r\n. 이는 Microsoft 제품에 사용되는 줄 끝이기도 합니다. (그들(또는 CP/M 작성자)은 프린터로 보낼 때 변환하는 방법을 몰랐기 때문에 해결 방법으로 모든 파일에 이 줄 끝을 지정했습니다. msmtp나름대로의 이유가 있을 수 있습니다.)

그러니 그것을 파이프로 연결해 보십시오 unix2dos.

echo -e "This is a test. $(tail -5 /var/log/syslog)" | unix2dos | msmtp @domain

또한 로그를 해석하기 위해 에코를 사용할 계획이 아니라면. 내가 할게

{
  echo -n "This is a test. "
  tail -5 /var/log/syslog
} |
  unix2dos | 
  msmtp 

관련 정보