2016-12-06 79 views
1

我想找到groh表達式, INFO:200000包。當前包是class com.navtech.kernel.flat.FlatCombo [Loader] [tstamp:1866 time:1851.4(30:51)split:03.2] [Memory:3.320G total:22.20G free:18.88G]grok正則表達式匹配

我試過

\ A(?:%{LOGLEVEL:level})%{GREEDYDATA:message} \ s(?:%{JAVACLASS:caller_class})\ s +([%{WORD:loglevel}] \ s + +([%{DATA:ts}] \ s +)+([%{DATA:mem}])

但現在我所缺少的是提取「Memory:」和「total:我會爲此寫出正則表達式嗎?

+0

你的意思是你想甲肝所有3:'內存:3.320G總計:22.20G免費:18.88G','3.320G'和'22.20G'?現在,你有1個'mem':'「mem」:[ 「內存:3.320G總計:22.20G免費:18.88G」 「' –

+0

或者你想刪除'mem'並且只能獲得內存「:[」3.320G「]'和'」total「:[」22.20G「]'? –

+0

謝謝@WiktorStribiżew,所有3將是罰款,但我不知道使用3.320沒有G –

回答

0

您可以使用

^(?:%{LOGLEVEL:level}):\s*%{DATA:message}\s*(?:%{JAVACLASS:caller_class})\s+\[%{WORD:loglevel}\]\s+(\[%{DATA:ts}\]\s+)+(\[\s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?\]) 

%{DATA:mem}被替換爲\s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?

  • \s*\S+\s+ - 0+空格,1+,除空白字符和空格1+(我們跳過Memory:
  • %{BASE10NUM:memory}\S* - 內存值由數字+零個或多個非空白符號組成,編號爲
  • \s+\S+\s+ - 1+空格,1 +,除空白字符和空格1+(我們跳過total:
  • %{BASE10NUM:total} - total值,該值是一個數字
  • .*? - 任何0+字符直至第一]

見測試屏幕:

enter image description here

+0

謝謝我嘗試相同,但我調整了一點 '^(?:%{LOGLEVEL:level}):\ S *%{DATA:消息} \ S *(?:%{JAVACLASS:caller_class})\ S + \ [%{WORD:記錄等級} \] \ S +(\ [%{DATA:TS} \] \ S +)+ (\ [\ s * \ S + \ s +%{NOTSPACE:used_memory} \ s + \ S + \ s +%{BASE10NUM:total_memory}。*?\])' 但是當我更改used_memory中的NOTSPACE和BASE10NUM I沒有匹配,你對這個問題有什麼看法 –

+0

我正在更新答案。使用'^(?:%{LOGLEVEL:level}):\ s *%{DATA:message} \ s *(?:%{JAVACLASS:caller_class})\ s + \ [%{WORD:loglevel} \] \ s + (\ [%{DATA:TS} \] \ S +)+(\ [\ S * \ S + \ S +%{BASE10NUM:存儲器} \ S * \ S + \ S + \ S +%。?{BASE10NUM:總} * \ ])' –

+0

如果你還需要保留'mem',使用'^(?:%{LOGLEVEL:level}):\ s *%{DATA:message} \ s *(?:%{JAVACLASS:caller_class} )\ s + \ [%{WORD:loglevel} \] \ s +(\ [%{DATA:ts} \] \ s +)+(\ [\ s *(? \ S + \ s +%{BASE10NUM:memory} \ S * \ s + \ S + \ s +%{BASE10NUM:total}。*?)\ s * \]) –