我需要帮助来过滤原始日志中的部分文本:
<variable>
<status type="String"><![CDATA[-1]]></status>
<errorCode type="String"><![CDATA[[bpm]]]></errorCode>
<mensagens type="MensagemSistema[]">
<item>
<msg_err type="String"><![CDATA[ERROR1-This is error: - THIS TEXT IS VARIABLE.]]</msg_err>
<msg_err_stack type="String"><![CDATA[stack_trace]]></msg_err_stack>
</item>
</mensagens>
</variable>
我想要的部分是:
<msg_err type="String"><![CDATA[ERROR1-This is error: - THIS TEXT IS VARIABLE.]]>
...而且这个文字是可变的。
我尝试用sed执行此操作,但我找不到删除两个字符串之外的文本的示例。另一件事是unix
提前谢谢 蒂亚戈答案 0 :(得分:0)
你可以试试下面的sed命令,
$ echo '<msg_err type="String"><![CDATA[ERROR1-This is error 1.]]></msg_err>' | sed 's/.*\[\([^][]*\).*/\1/g'
ERROR1-This is error 1.
答案 1 :(得分:0)
这看起来像是XML解析器的工作。 Perl模块XML::Simple能够检索您想要的数据:
perl -MXML::Simple -e '$xml = XMLin(\*STDIN); print $xml->{'mensagens'}->{'item'}->{'msg_err'}->{'content'};' < error.xml
输出:
ERROR1-This is error: - THIS TEXT IS VARIABLE.
请注意,我添加了>
来关闭msg_err
标记中的CDATA,因为我认为这是一个错字。