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

AIX: Parse XML and print element value to console on condition

我正在尝试解析结构类似于 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是OS用的。

我试过的:

没有安装也无法安装的 XML-解析器。 grep 已安装,但除非我严重错误,否则它无法完成此任务。因此,我一直在查找有关 awk 和 sed 的信息。

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

...是我发现的。具有讽刺意味的是,这不是 return 从 args 开始标记到 labels 结束标记的范围,而是文件中的所有其他内容。有人可以给我提示吗?然后我计划通过 1p;$p.

简单地打印第一行 (=args) 和最后一行 (=labels)

提前致谢。

尝试:

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

搜索带有“args”的行并添加到保留 space。然后搜索“标签”。在有“labels2”的地方,将 hold space 复制到模式 space 并将该行分成三部分,仅用该行替换第二部分(值)。

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

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