我有一個檔案,其中有幾行是這樣的:
我有一個檔案,其中有幾行是這樣的:
例子 requested: 24:00。 00 示例 使用: 01。 14:11。
我想要的是:
{
"example_requested"。"24:00:00"。
"example_used": 01:14:11。
}
我所嘗試的(這是ruby塊):
if x =~ /(application requested)/
example_requested = x.scan(/^(?:.*?: ){1}(.*)$/) [0]
example_requested = (memory_requested * "").gsub(s /, "")
我得到
"example_requested" : "24:00:00ExampleUsed:01:14:11"
在https://rubular.com/r/WOmAqx4YkOnDER中嘗試了一些組合,但當我把它放在Logstash中的ruby code塊中時,這段代碼實際上并沒有像這里一樣作業。唯一能在這里起作用的是用gsub跳過空位。希望得到任何幫助
UPDATE:
if x =~ /(application Requested)/
example_used = x.scan(/^(?:.*?: ){2}(.*)$/) [0]
example_used = (example_used * "").gsub(s /, "")
實際的結果是:
"example_used"/span>。01:14:11
但我想有一個更好的方法可以做到這一點
。uj5u.com熱心網友回復:
我沒有親自測驗過,但我很確定kv過濾器可能是這里的方法。它接受field_split_pattern,它可以是一些由多個空格組成的重組詞,而value_split_pattern則可以是" :"。
kv過濾器的檔案。
uj5u.com熱心網友回復:
str = "請求的例子:24:00:00 使用的例子。01:14:11"
r = /p{Alpha}[p{Alpha} ]*|d{2}:d{2}:d{2}/
Hash[*str.scan(r)] 。
#=> {"請求實體"=> "24:00:00", "使用實體"=> "01:14:11"}
注意:
str.scan(r)
#=> ["要求的例子", "24:00:00", "使用的例子", "01:14:11"]/span>
該正則運算式的內容是:"匹配一個Unicode字母(p{Alpha}),后面是零個或多個(*)Unicode字母或空格,或三對數字(d{2}),用冒號隔開"。見Hash:[].
uj5u.com熱心網友回復:
實際上,這樣做很好:
ruby {
code => '
message = event.get("message")
matches = message.scan(/s*([a-zA-Z ] ):s ([d:.BKMGT] ))/)
matches.each { |x|
event.set(x[0].downcase.gsub(/ /, "_"), x[1])
}
'
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/323821.html
標籤:
