我需要在一场比赛和 4 组中过滤 NE、RESULT、REASON。这里的 REASON 将在 RESULT 值为“NOK”时出现
示例日志:
[(DU_21040162,NOK,unknown-element test test,<bad-element>gnbdu:gnb-du-cac-info2</bad-element>this is test string <bad-resource>gnbdu</bad-resource>),(DU_21040163,OK,'','',''),(DU_21040164,NOK,unknown-element test test,<bad-element>gnbdu:gnb-du-cac-info2</bad-element>this is test string <bad-resource>gnbdu</bad-resource>),,(DU_21040165,OK,'','','')]
[2023-04-06 16:28:33] NE=DU_21040162 , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config ,RESULT=NOK, REASON=<rpc-error>unknown-element test test
RPC
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:edit-config>
<nc:target>
<nc:running />
</nc:target>
<nc:default-operation>none</nc:default-operation>
<nc:config>
<gnbdu:managed-element xmlns:gnbdu="http://example.com/">
test string
</gnbdu:managed-element>
</nc:config>
</nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1680778713062_system_127.0.0.1">
<rpc-error>
<error-path xmlns:gnbdu="http://example.com/">/rpc/edit-config/config/gnbdu:managed-element/gnbdu:gnb-du-function</error-path>
<error-info>
<bad-element>gnbdu:gnb-du-cac-info2</bad-element>
this is test string
<bad-resource>gnbdu</bad-resource>
</error-info>
</rpc-error>
</rpc-reply>
;
[2023-04-12 14:04:04] NE=DU_21040162 , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config , RESULT=OK
RPC=
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:edit-config>
<nc:target>
<nc:running />
</nc:target>
<nc:default-operation>none</nc:default-operation>
<nc:config>
<gnbdu:managed-element xmlns:gnbdu="http://example.com/">
test string
</gnbdu:managed-element>
</nc:config>
</nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1681288444979_system_127.0.0.1">
<ok/>
</rpc-reply>
;
[2023-04-06 16:28:33] NE=DU_21040164, USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config ,RESULT=NOK, REASON=<rpc-error>unknown-element test test
RPC
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:edit-config>
<nc:target>
<nc:running />
</nc:target>
<nc:default-operation>none</nc:default-operation>
<nc:config>
<gnbdu:managed-element xmlns:gnbdu="http://example.com/">
test string
</gnbdu:managed-element>
</nc:config>
</nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1680778713062_system_127.0.0.1">
<rpc-error>
<error-path xmlns:gnbdu="http://example.com/">/rpc/edit-config/config/gnbdu:managed-element/gnbdu:gnb-du-function</error-path>
<error-info>
<bad-element>gnbdu:gnb-du-cac-info2</bad-element>
this is test string
<bad-resource>gnbdu</bad-resource>
</error-info>
</rpc-error>
</rpc-reply>
;
[2023-04-12 14:04:04] NE=DU_21030163 , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config , RESULT=OK
RPC=
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:edit-config>
<nc:target>
<nc:running />
</nc:target>
<nc:default-operation>none</nc:default-operation>
<nc:config>
<gnbdu:managed-element xmlns:gnbdu="http://example.com/">
test string
</gnbdu:managed-element>
</nc:config>
</nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1681288444979_system_127.0.0.1">
<ok/>
</rpc-reply>
;
我尝试使用下面的正则表达式。
NE=([\S]+)|结果=([\w]{1,4})|(原因=[\S\s].)|([\s\S]?)。 *?
NE=([\S]+).RESULT=([\w]+)(?:.REASON=([\S\s].))?|([\s\S]? )
NE=([\S]+).RESULT=([\w]+)(?:.REASON=([\S\s].))?[\s\S]([\ s\S]*?)|NE=([\S]+).*RESULT=([\w]+)(?:.REASON=([\S\s].))?
问题的预期输出:
[(DU_21040162,NOK,unknown-element test test,gnbdu:gnb-du-cac-info2this is test string gnbdu),(DU_21040163,OK,'','',''),(DU_21040164,NOK,unknown- element test test,gnbdu:gnb-du-cac-info2这是测试字符串gnbdu),,(DU_21040165,OK,'','','')]