我們有包含Apache Http客戶端輸出的日誌文件。因爲它去「過線」我們看到輸出,它包括象線路:嘗試使用sed着色Apache http連線日誌
< < HTTP/1.1 200請求已成功
的人字形「< <」表示傳入,在與傳出內容的'>>'形成鮮明對比。使用'tail -F'來跟蹤這些日誌足夠有趣,但我認爲使用sed根據輸入或輸出來着色輸出將是一個有用的練習。
一個簡單的測試會告訴你我是什麼意思:
echo '<< HTTP/1.1 200 The request has succeeded' | sed -r -e 's_<<_\x1b[31;1m&\x1b[0m_i' -e 's_>>_\x1b[32;1m&\x1b[0m_i'
輸入,並
echo '>> HTTP/1.1 200 The request has succeeded' | sed -r -e 's_<<_\x1b[31;1m&\x1b[0m_i' -e 's_>>_\x1b[32;1m&\x1b[0m_i'
輸出。
到目前爲止,這麼好。當我想到突出顯示HTTP響應代碼並根據類對它們着色時更加有用,例如,2xx爲綠色,5xx爲紅色,這種情況開始出現在正則表達式瘋狂中。
到目前爲止,我可以匹配到第一個數字與響應代碼: echo '<< HTTP/1.1 200 The request has succeeded' | sed -r -e 's_<<_\x1b[31;1m&\x1b[0m_i' -e 's_>>_\x1b[32;1m&\x1b[0m_i' -e 's_HTTP[^[:alpha:]]*2\d*_\x1b[32;1m&\x1b[0m_g'
它只是着色達,<< HTTP/1.1 2
。我的期望是HTTP[^[:alpha:]]*2\d*
會匹配'HTTP',接下來是所有不是按字母順序排列的'2',然後是任意數字。理想情況下,我會使用「{2}」而不是「*」,但這具有相同的效果。
任何正則表達式大師能指出我的錯誤嗎?
謝謝。我不得不刪除我的終端的大括號內的'\'。我現在對於2xx響應和's_HTTP [^ [:alpha:] {1,} 2 [0-9] {1,} _ \ x1b [32; 1m&x1b [0m_g'] :]] {1,} 5 [0-9] {1,} _ \ x1b [31; 1m&x1b [0m_g' for 5xx。 – dougal2K 2014-10-07 11:49:08
奇怪的是,如果不使用帶'-E'的GNU sed,並且肯定使用posix版本(我在AIX上測試),則需要在sed上刪除'\'。如果它在你的終端上運行,那就是目標。最後的'g'也是不需要的,每行只有一個序列 – NeronLeVelu 2014-10-07 11:52:21