ログファイルの各行の末尾に「\ n」を追加する方法

ログファイルの各行の末尾に「\ n」を追加する方法

私はmsmtpを使用して会社に設定したいくつかのRPiキオスクに電子メール通知を生成しています。残念ながら、電子メール通知にログファイルの最後の5行を含めようとすると、msmtpは改行を正しく処理できず、エラーが発生します。すべて1行のテキストで印刷します。ログファイルのすべての行に\ 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 

関連情報