如何将“\n”添加到日志文件中每行的末尾

如何将“\n”添加到日志文件中每行的末尾

我正在使用 msmtp 在我们在公司设置的一些 RPi 信息亭上创建电子邮件警报,不幸的是,如果我尝试在电子邮件警报中包含日志文件的最后 5 行,msmtp 无法处理换行正确,并且将所有内容打印在一行文本上。如果日志文件的每一行中都包含 \n,则它会在电子邮件警报中正确输出。

该命令的一个基本示例是:

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

它确实回显了系统日志;但它都在一堵文本墙中,因为msmtp似乎无法处理换行符。如果我手动编辑系统日志并添加\n到每行末尾,它会正确打印

sed 或 awk 添加\n到日志文件中每一行末尾的正确语法是什么?

答案1

这很简单。输入msmtp应该是格式正确的邮件消息,带有标题和正文。毕竟,它是/usr/{bin,lib}/sendmail.您尚未将标头与正文分隔开,或者实际上根本没有生成任何标头。您的系统日志行被视为(一些非常奇怪的)标题。

标头。新队。身体。生成那个。

答案2

我的猜测是邮件工具正在等待\r\n.这也是 Microsoft 产品上使用的行结尾。 (他们(或者可能是 CP/M 的作者)不知道在将其发送到打印机时如何对其进行转换,因此作为一种解决方法,使每个文件都有此行结尾。msmtp可能有其自己的原因。)。

因此尝试通过管道将其通过unix2dos

IE

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

另外,除非您打算使用 echo 来解释日志。我会做

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

相关内容