Sed

列印 mail.log 行的日期

  • July 16, 2017

我有一個 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>

如何提取日期並將其添加到輸出中?

醜陋但把這個放在sed聲明的開頭:

-e 's/^\([[:alpha:]]+ [[:digit:]]+ [[:digit:]]+:[[:digit:]]+:[[:digit:]]+\).*Subject:\(.*\)/\1\2/'

或者,如果您總是知道“郵件後綴”將出現在該位置的文本中,您可以使用:

-e 's/^\(.*\) mail postfix.*Subject:\(.*\)/\1\2/'

並且其他變化是可能的。關鍵是擷取日期,跳過您不關心的部分,然後再次擷取您仍需要處理的其餘部分。要擷取環繞\(\)列印您擷取的內容,請使用\n其中 n 是特定擷取的位置(第一個是 1,第二個是 2,等等)

現在您知道了這一點,您可能會弄清楚如何消除所有單獨的指令(-e),使用多個擷取組,並將其歸結為一個sed表達式。

引用自:https://unix.stackexchange.com/questions/378742