Regex 如何从系统日志中检索键和值?

Regex 如何从系统日志中检索键和值?,regex,linux,Regex,Linux,我试图从syslog解析日志,但我有一些疑问和困难找到一个合适的正则表达式 下面是一些示例日志,特别是我需要检索每行的POWER、LoadAvg等值 2019-08-20T00:26:39.146778+02:00 4CHdoorManager ESP-RSL: SENSOR = {"Time":"2019-08-19T23:26:39","AM2301":{"Temperature":null,"Humidity":null},"TempUnit":"C"} 2019-08-20T00:26:

我试图从syslog解析日志,但我有一些疑问和困难找到一个合适的正则表达式

下面是一些示例日志,特别是我需要检索每行的POWER、LoadAvg等值

2019-08-20T00:26:39.146778+02:00 4CHdoorManager ESP-RSL: SENSOR = {"Time":"2019-08-19T23:26:39","AM2301":{"Temperature":null,"Humidity":null},"TempUnit":"C"}
2019-08-20T00:26:40.473409+02:00 BedroomBlind ESP-RSL: STATE = {"Time":"2019-08-19T23:26:40","Uptime":"0T10:19:02","Vcc":3.116,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"*************","BSSId":"*************","Channel":11,"RSSI":60,"LinkCount":1,"Downtime":"0T00:00:06"}}
2019-08-20T00:26:43.669180+02:00 KitchenLight ESP-RSL: STATE = {"Time":"2019-08-19T23:26:44","Uptime":"3T10:54:22","Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"POWER":"OFF","Wifi":{"AP":1,"SSId":"*************","BSSId":"*************","Channel":11,"RSSI":52,"LinkCount":36,"Downtime":"0T00:02:31"}}
2019-08-20T00:26:43.689504+02:00 KitchenLight ESP-RSL: SENSOR = {"Time":"2019-08-19T23:26:44","AM2301":{"Temperature":27.7,"Humidity":59.4},"TempUnit":"C"}
2019-08-20T00:26:45.229894+02:00 BathroomFan ESP-RSL: STATE = {"Time":"2019-08-19T23:26:44","Uptime":"3T22:28:27","Vcc":3.141,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"POWER":"OFF","Wifi":{"AP":1,"SSId":"*************","BSSId":"*************","Channel":11,"RSSI":84,"LinkCount":28,"Downtime":"0T00:04:17"}}
2019-08-20T00:26:45.229894+02:00 BathroomFan ESP-RSL: SENSOR = {"Time":"2019-08-19T23:26:44","AM2301":{"Temperature":27.7,"Humidity":64.1},"TempUnit":"C"}
2019-08-20T00:26:51.960401+02:00 EntranceLight ESP-RSL: STATE = {"Time":"2019-08-19T23:26:52","Uptime":"3T03:20:28","Heap":14,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"POWER":"OFF","Wifi":{"AP":1,"SSId":"*************","BSSId":"*************","Channel":11,"RSSI":100,"LinkCount":19,"Downtime":"0T00:01:40"}}

您是否打算使用纯linux(如sed、grep)或某种语言来实现这一点?我认为在大多数语言中,您可以使用命名组,如:

\"LoadAvg\":(?P<loadAvg>\d+?),\"POWER\":\"(?P<power>.+?)\"
“LoadAvg\”:(?P\d+?),“POWER\”:“(?P+?)”

您打算使用纯linux(如sed、grep)还是某种语言来实现这一点?我认为在大多数语言中,您可以使用命名组,如:

\"LoadAvg\":(?P<loadAvg>\d+?),\"POWER\":\"(?P<power>.+?)\"
“LoadAvg\”:(?P\d+?),“POWER\”:“(?P+?)”

使用带有选项
-p
(Perl)和
-o
(仅匹配)的
grep


grep
与选项
-p
(Perl)和
-o
(仅匹配)一起使用: