2015-06-03 31 views
1

我想分析一些日誌文件。每一行看起來是這樣的:如何提取以「#。#ms」結尾的行末尾的所有數字?

2015-06-03 16:09:05,615 200 GET /url/endpoint (127.0.0.1) 19.15ms 
2015-06-03 16:09:06,615 200 GET /url/endpoint (127.0.0.1) 2.19ms 

我發現,如果「MS」是不是有我可以做這樣的事情來獲得最後一個

\d*\.?\d*$ 

但即使這樣,也只獲取最後一個時間戳。

任何想法或提示都非常感謝!

+1

你使用的是什麼正則表達式? –

+1

@AdamSmith POSIX – louhow

+0

沒有小數值時的文字是什麼? 「19.0ms」,「19.ms」或「19ms」之一? – usr2564301

回答

2

ms部分很簡單,因爲它是逐字匹配的:如果你想在字符串末尾匹配它,簡單地把它放在你的正則表達式的末尾。

如果每條線由\n終止,你可以在你的正則表達式使用它:

\d+\.\d{2}ms\n 

demo1.

根據您的系統,你可以通過指定與$匹配結束行多線選項。你這樣做取決於提供你的正則表達式實現的系統(demo2)。

0

您可能只需使用(\d+|\d+\.\d+)ms即可獲取該號碼,因爲行中沒有其他「ms」。如果你想在行尾使用「$」,你應該將你的正則表達式設置爲多行。

如果您正在使用POSIX正則表達式,你可能需要使用\(\)代替()

像這樣:https://regex101.com/r/jN8eP6/1

1

一個簡單的方法(基本POSIX正則表達式):

[[:space:]]\(.*\)ms$ 

空格後緊跟的時間和ms之後 - 在該行的末尾。結果是在捕獲組1中。