AIX:根据条件将 XML 和打印元素值解析到控制台



我正在尝试解析一个结构类似于XML的.conf文件(我知道...)。每个标记在 xml 文件中都是唯一的。示例配置可能如下所示(请注意,arg 可以有多个用逗号分隔的值):

<?xml version="1.0" encoding="..."?>
<conf>
<id>123</id>
<args>arg1=value1 arg2=value21,value22 arg3=value3 ...</args>
<someotherstuff>abc</someotherstuff>
<labels>label1,label2</labels>
<someotherstuff2>def</someotherstuff2>
</conf>

我想做什么:

我想遍历包含所有配置(非递归)的文件夹,如果该文件的labels包含label2,则打印<args>的值。如果文件不包含标签,则可以跳过该文件。AIX 是使用的操作系统。

我尝试过:

没有安装XML解析器,也无法安装它们。 grep 是停滞的,但除非我大错特错,否则它无法完成这项任务。因此,我一直在查找有关awk和sed的信息。

find . -type f -name "*.conf" -exec sed -n -e '/<args>/,/</labels>/d; p' {} +;

。是我发现的。具有讽刺意味的是,这不会返回从args开始标记到labels结束标记的范围,而是返回文件中的其他所有内容。有人可以给我一个提示吗?然后我计划通过执行1p;$p来简单地打印第一行(=args)和最后一行(=labels)。

提前谢谢你。

您可以尝试使用 awk 匹配 args 标签并保存该行,然后对标签行进行相同,然后匹配 'label2' 并打印参数:

awk '/<args>/{ARGS=$0;}/<labels>/{LABELS=$0}END{if(LABELS ~ /label2/){print ARGS;}}'

尝试:

sed -En '/args/h;/labels/{/label2/{g;s/(^.*args>)(.*)(</args>$)/2/p}}'

搜索带有"args"的行并添加以保存空间。然后搜索"标签"。如果存在"labels2",则将保留空间复制到图案空间,并将线条分成三个部分,并仅将行替换为第二部分(值)。

最新更新