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;}}'
我正在尝试解析结构类似于 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;}}'