Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed sh-删除两个字符串之外的文本_Sed_Sh_Aix - Fatal编程技术网

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.