打印 mail.log 行的日期

打印 mail.log 行的日期

我有一个 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表达式。

相关内容