![如何将“\n”添加到日志文件中每行的末尾](https://linux22.com/image/169978/%E5%A6%82%E4%BD%95%E5%B0%86%E2%80%9C%5Cn%E2%80%9D%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD%E6%AF%8F%E8%A1%8C%E7%9A%84%E6%9C%AB%E5%B0%BE.png)
我正在使用 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