Sed sh-删除两个字符串之外的文本
我需要帮助从原始日志中筛选部分文本:Sed sh-删除两个字符串之外的文本,sed,sh,aix,Sed,Sh,Aix,我需要帮助从原始日志中筛选部分文本: <variable> <status type="String"><![CDATA[-1]]></status> <errorCode type="String"><![CDATA[[bpm]]]></errorCode> <mensagens type="MensagemSistema[]"> <item>
<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
提前谢谢
Tiago您可以尝试下面的sed命令
$ echo '<msg_err type="String"><![CDATA[ERROR1-This is error 1.]]></msg_err>' | sed 's/.*\[\([^][]*\).*/\1/g'
ERROR1-This is error 1.
$echo'.\sed's/*\[\([^][*\])./\1/g'
错误1这是错误1。
这看起来像是XML解析器的工作。Perl模块能够检索所需的数据:
perl -MXML::Simple -e '$xml = XMLin(\*STDIN); print $xml->{'mensagens'}->{'item'}->{'msg_err'}->{'content'};' < error.xml
请注意,我添加了一个
来关闭msg_err
标记中的CDATA,因为我假设这是一个输入错误。您的预期输出是什么?我只需要:error 1这是error 1,但我认为我的问题本质上是删除示例中的行的外部文本。日志是格式良好的xml吗?不要使用sed
;它不是XML parser.well这是aix,我认为在这个系统中没有可用的工具,这是一个客户环境。对不起,我忘了引用一些东西,我要编辑原始消息我尝试了其他方法,但最后我使用了您的方法处理grep。这个版本的aix非常有限,您不需要grep.Add-n作为argument和模式末尾的p因此:sed-n的s/*[([^][*])./\1/pg'--另外,您是否希望g位于末尾?这意味着要多次替换,但我认为您将只命中一次,因为结尾处有。*。所以…请将其设置为:sed-n的s/*[([^][*]).*/\1/p'我尝试了此方法,但不起作用…这是由于堆栈跟踪/运行时错误造成的,保存在系统的表中。如果没有更多详细信息,则无法说明原因。假设解析成功,您可能希望尝试使用Data::Dumper
打印$xml
变量,并精确计算出要导出的部分如果你有更多的细节,你应该编辑你的问题。
ERROR1-This is error: - THIS TEXT IS VARIABLE.