【发布时间】:2016-09-19 16:11:15
【问题描述】:
我需要帮助从这样的文件中提取 XML 字符串:
<line>
<Start_Time>2016-May-18 17.06.17.504</Start_Time>
<Domain>pciereg062</Domain>
<Injected_tags>
before xml started ; AUTOMATIC-REPRODUCTION-stopped on barrier ;
</Injected_tags>
</line>
<line>
<Start_Time>2016-May-18 17.08.53.585</Start_Time>
<Domain>adv191</Domain>
<Injected_tags>port-num-0 ; port-num-0 actual-FW-14.16.0234 ;
</Injected_tags>
</line>
我想提取在injected_tags 中的域名(总是在域之后出现)字符串在屏障上停止。
是否有一个简单的 bash 实用程序来执行此操作(grep、awk、sed)?
从上面的例子中,输出应该是pciereg062而不是adv191。
【问题讨论】:
-
使用 XML/HTML 解析器(xmllint、xmlstarlet ...)。
-
虽然它是一种快速、肮脏、糟糕且不可靠的解决方案,但只要您的 XML 输入结构保持不变,它就应该可以工作:
grep -B 2 'stopped on barrier' input.xml | grep -Po '(?<=<Domain>).*(?=</Domain>)'。你真的应该像 Cyrus 建议的那样研究一些 XML 解析器。