- 论坛徽章:
- 0
|
有如下一个xml文件,全篇都是很多很多个<MESSAGE>和</MESSAGE>的标签。
我想提取某个
<EXEC_CONTEXT_ID><UNIQUE_ID>1310542601:10.140.18.133:720938:0:399</UNIQUE_ID><SEQ>1</SEQ></EXEC_CONTEXT_ID>
属性对应的那一窜<MESSAGE>和</MESSAGE>之间的消息内容,请问应该怎么处理呢?
恳请指点一下,谢谢各位。
我个人的思路是,先把每个<MESSAGE>和</MESSAGE>之间的内容合并成一行
然后再grep到相应的内容,
最后再把一行的<MESSAGE>和</MESSAGE>内容还原出来
但是,我用sed的时候
sed -e '/<\/MESSAGE>/p' -e ':a;N;$!ba;s/\n/ /g' log1075.xml_bak
会报
sed: The label :a;N;$!ba;s/\n/ /g is greater than eight characters.
可能版本不支持似的。- <MESSAGE>
- <HEADER>
- <TSTZ_ORIGINATING>2011-07-13T15:36:42.057+08:00</TSTZ_ORIGINATING>
- <COMPONENT_ID>tip</COMPONENT_ID>
- <MSG_TYPE TYPE="NOTIFICATION"></MSG_TYPE>
- <MSG_LEVEL>1</MSG_LEVEL>
- <HOST_ID>soaesbp4</HOST_ID>
- <HOST_NWADDR>10.140.18.133</HOST_NWADDR>
- <MODULE_ID>esb.server.common.interceptor</MODULE_ID>
- <THREAD_ID>33</THREAD_ID>
- <USER_ID>oracle</USER_ID>
- <SUPPL_ATTRS>
- <ATTR NAME="WEBSERVICE.name">ESB_RouterForWebSubSystem_Service</ATTR>
- <ATTR NAME="J2EE_APP.name">esb-rt</ATTR>
- <ATTR NAME="J2EE_MODULE.name">provider-war</ATTR>
- <ATTR NAME="WEBSERVICE_PORT.name">__soap_RouterForWebSubSystem_InquirySoapESB</ATTR>
- </SUPPL_ATTRS>
- </HEADER>
- <CORRELATION_DATA>
- <EXEC_CONTEXT_ID><UNIQUE_ID>1310542601:10.140.18.133:720938:0:399</UNIQUE_ID><SEQ>1</SEQ></EXEC_CONTEXT_ID>
- </CORRELATION_DATA>
- <PAYLOAD>
- <MSG_TEXT>publishing IN event: BusinessEvent{systemGUID=6BF2A4B04C5511E09F43655A87EA1A80operationName=IMemberGetMyPCsoperationGUID=25D78798DE1E11DDBFF8B72EF680E27C, key
- =IMemberGetMyPCs, priority=4, correlationId=null, , Last Subscription= , Error Message=null, Error Stack=null, BES_PAYLOAD_OBJECT=false} = interceptor: null</MSG_TEXT>
- </PAYLOAD>
- </MESSAGE>
复制代码 |
|