【发布时间】:2021-08-23 07:24:28
【问题描述】:
我有一个包含大量 XML 节点的文件:
<output>
<file name="user.java">
</file>
<file name="random.java">
<error line="52" column="3" severity="warning" message="User is not found." source="randomSource"/>
</file>
<output/>
现在我需要将错误节点中的source 替换为文件中的name 属性并将其打印到文件中。所以输出文件应该有only的错误行:
<error line="52" column="3" severity="warning" message="User is not found." name="customer.java"/>
名字最好是第一个属性:
<error name="random.java" line="52" column="3" severity="warning" message="User is not found." />
所以新文件应该只包含错误节点,我只能使用默认工具,例如 sed/awk/cut/etc...
我只打印了错误行,但不知道如何执行上述操作:
awk -vtag=file -vp=0 '{
if($0~("^<"tag)){p=1;next}
if($0~("^</"tag)){p=0;printf("\n");next}
if(p==1){$1=$1;printf("%s",$0)}
}' infile
【问题讨论】:
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器(xmlstarlet、xmllint ...)。外科医生也不使用电锯进行手术。
-
获得许可,然后。
-
请edit您的问题显示您发布的输入的预期输出,因为不同的人回答正在猜测您可能想要的不同输出。