2017-06-12 42 views
0

在日誌中有行,如如何讓grep的輸出排除字母

20:01:59:008 46ffd700  ETH - Total Speed: 126.291 Mh/s, Total Shares: 33, Rejected: 0, Time: 00:09 

我想用grep &尾獲取包含"ETH - Total Speed"最近的線,但只想輸出126.291

這是如何實現的?

+0

你嘗試過什麼來解決這個後? 'tac + sed'會比'grep'容易.. – Sundeep

+0

tail -f〜/ mine.log | grep,它將如何完成sed? – sealfab

+0

添加超過幾行的樣本問題和預期的輸出...還添加你試圖質疑,而不是評論....因爲你正在使用'尾巴-f'我不知道該怎麼建議。 。你需要某種解決方案,它也會照顧緩衝... https://stackoverflow.com/questions/13858912/piping-tail-output-though-grep-twice – Sundeep

回答

0

比方說,我們要輸出的第一個匹配的「ETH - 總速度」的最後20行中*值和履行本,而文件增長:

tail -f -n 20 logfile | grep --line-buffered -Po -m 1 'ETH - Total Speed: \K\S+(?= Mh/s)' 

結果應印象下面這樣:

126.291 

詳細

  • --line-buffered - 在輸出上使用行緩衝。這可能會導致性能損失
  • -P - 使PCRE

  • -m 1 - 停止讀取文件中的第一個匹配的行

+0

謝謝,這給出了預期的輸出。我試圖使用這是一個自定義zabbix項目。在終端中運行時,它會等待下一次發生在日誌中的輸出,以便在通過zabbix代理運行時超時。它如何輸出最後找到的比賽,而不是等到下一場比賽發生? – sealfab

+0

我相信-n選項是導致此行爲的原因,因爲日誌可能會累積超過20行不包含匹配項的行。我得到它使用tac logfile |工作grep -Po'ETH - 總速度:\ K \ S +(?= Mh/s)'|頭-1我現在可以使用tac,但有沒有辦法用尾巴做到這一點? – sealfab

+0

謝謝,你能幫我理解「最後找到」和「最近」之間的區別是什麼,我認爲這是同樣的事情 – sealfab