我試圖從星號日誌中實時摘取電話號碼。我使用tail來做到這一點,問題是從我所知道的是,grep使用行緩衝,因爲尾巴沒有結束它等待尾部刷新,但我需要通過系統來的數字。這裏是我的代碼如何關閉grep行緩衝
tail -f /var/log/asterisk/messages | grep @default | awk -F ' ' '{ print $11 }' | awk -F '[^0-9]*' '{ print $2 }'
我也想確保它返回的模式也是一個10位的數字,因爲它代表它是返回較小的1-6位數字。
在此先感謝
TrueY: 接近於:這裏是一個例子,即時通訊設法過濾
[Jul 17 12:11:00] VERBOSE[13992] logger.c: [Jul 17 12:11:00] -- Executing [[email protected]:1] DeadAGI("Local/[email protected],2", "agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----0-----CANCEL----------") in new stack
什麼,我想要做的是拉的10位電話號碼的數據緊隨 '@default'
我不認爲您理解「行緩衝」.GGp每次緩衝一行,並檢查並打印如果它看到換行符,它就會(如果匹配的話)。對於許多正則表達式類型,無論如何都不可能判斷該行是否匹配,直到換行符。 – Kevin
另外,'grep | awk'是多餘的,兩個'awk'也是多餘的。 s;使用'tail -f ... | awk -F'''/ @ default/{split($ 11,a,/ [0-9] + /); print a [2]}''。除非你需要兩個空格在它們之間創建一個空的字段,放下'-F'''。 – Kevin
@Kevin:我認爲在你的解決方案中,$ 11被一個數字分割,但是在OPs的例子行中應該被一個非數字分割(如果我理解他的目標的話)。 – TrueY