我通过电报历史(txt文件)进行处理,我需要提取&处理相当复杂(嵌套)的多行模式。 这是整个模式
Free_Trade_Calls__AltSignals:IOC/ BTC (bittrex)
BUY : 0.00164
SELL :
TARGET 1 : 0.00180
TARGET 2 : 0.00205
TARGET 3 : 0.00240
STOP LOS : 0.000120
2018-04-19 15:46:57 Free_Trade_Calls__AltSignals:TARGET
基本上我正在寻找以
开头的模式Free_Trade_Calls__AltSignals: ^%(
以时间戳结束。 在那个模式里面(电报留言)
- exchange - in brackets in the 1st line
- extract value after BUY
- SELL values in a array of 3 SELL[3] : target 1-3
- STOP loss value (it can be either STOP, STOP LOSS, STOP LOS)....
我发现了这个Logstash grok multiline message,但我对logstash firend非常陌生,建议我这样做。我试图在NodeJS中解析这个文本,但它确实是痛苦的屁股和疯狂的。
谢谢Rob:)
答案 0 :(得分:1)
由于您需要从每一行中获取值,因此您不需要使用多行修饰符。您可以使用%{SPACE}
字符跳过空行。
对于您的给定日志,可以使用此模式,
Free_Trade_Calls__AltSignals:.*\(%{WORD:exchange}\)\s*BUY\s*:\s*%{NUMBER:BUY}\s*SELL :\s*TARGET 1\s*:\s*%{NUMBER:TARGET_1}\s*TARGET 2\s*:\s*%{NUMBER:TARGET_2}\s*TARGET 3\s*:\s*%{NUMBER:TARGET_3}\s*.*:\s*%{NUMBER:StopLoss}
请注意\s*
等于%{SPACE}
它会输出,
{
"exchange": [
[
"bittrex"
]
],
"BUY": [
[
"0.00164"
]
],
"BASE10NUM": [
[
"0.00164",
"0.00180",
"0.00205",
"0.00240",
"0.000120"
]
],
"TARGET_1": [
[
"0.00180"
]
],
"TARGET_2": [
[
"0.00205"
]
],
"TARGET_3": [
[
"0.00240"
]
],
"StopLoss": [
[
"0.000120"
]
]
}