主要是分析lag
它的格式範例大致如下:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
5FE7D17E9DC 57621 Mon Mar 28 10:24:56 post@ccc.ddd.com
(connect to aaa.ttt.org[xxx.xxx.xxx.xxx]: Connection refused)
tata.bbs@aaa.ttt.org
現在要配合分析的程式把第三行的tata.bbs@aaa.ttt.org
改成 remote tata.bbs@aaa.ttt.org
remote和tata.bbs@aaa.ttt.org中間只有要空白隔開即可多少不個空白不重要
試著利用grep和sed是能夠抓到我要的東西並修改
一開始我的寫法是
grep -v '^$' maillist | grep -v '^[0-9A-Z]' | grep -v '(' | grep -v '^-' | sed 's/^/remote/g' > maillist2
但這樣寫是把我要的改的東西抓出來改好後輸出為maillist2
後來想到和原本的需求不同
應該要直接寫進log不影響原本的格式
也就是會變成
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
5FE7D17E9DC 57621 Mon Mar 28 10:24:56 post@ccc.ddd.com
(connect to aaa.ttt.org[xxx.xxx.xxx.xxx]: Connection refused)
remote tata.bbs@aaa.ttt.org
直接改掉應該要怎麼寫才好呢?
是否能夠把我之前用grep判斷出來的東西餵給sed?
您這log其實是postfix的 mailq 執行的結果,
也許您是要算mailq的情況吧?
就以您這很寬鬆的條件下:
lokicjn提到:
remote和tata.bbs@aaa.ttt.org中間只有要空白隔開即可多少不個空白不重要
所以用awk指令就可達成,甚至用不上regular expression:
<pre class="c" name="code">mailq | awk '{if (NR%4==0) {print "remote "$0} else {print $0}}'
出來的結果應該就符合您的需求。
因為mailq執行後您想要加remote的該行,
等於是每第四行要加上remote的字樣,
這樣可以很清楚地看出來:
<pre class="c" name="code">mailq | awk '{print NR$0}'
只要在每第四行做處理就好了。
所以用第一段的程式碼執行結果,會變成類似這樣子:
<pre class="c" name="code">-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
5FE7D17E9DC 57621 Mon Mar 28 10:24:56 post@ccc.ddd.com
(connect to aaa.ttt.org[xxx.xxx.xxx.xxx]: Connection refused)
remote tata.bbs@aaa.ttt.org
應該餵給您另個解析程式,就符合想要的樣式。
所以用awk、從固定行數的特徵,就可解這問題。