Parsing 使用xpath外壳解析xml

Parsing 使用xpath外壳解析xml,parsing,xpath,awk,Parsing,Xpath,Awk,首先,我对shell、Java、Python、Perl和任何其他基于Linux的脚本语言都非常陌生。我需要做一些我认为相对简单的事情,但却无法付诸实施。我更好地使用了awk和类似于xpath的awk输出,但似乎不那么容易使用。 首先,我将向您展示需要解析的.xml输出: 大宗报价 理想情况下,我希望不仅能够报告Name、Type、Accessible和Hosts的XML属性,而且能够在这些属性中报告,以便只发送我想要的输出,即,希望报告所有以p开头的名称。迄今为止,我的代码尝试有: * awk

首先,我对shell、Java、Python、Perl和任何其他基于Linux的脚本语言都非常陌生。我需要做一些我认为相对简单的事情,但却无法付诸实施。我更好地使用了awk和类似于xpath的awk输出,但似乎不那么容易使用。 首先,我将向您展示需要解析的.xml输出:

大宗报价

理想情况下,我希望不仅能够报告Name、Type、Accessible和Hosts的XML属性,而且能够在这些属性中报告,以便只发送我想要的输出,即,希望报告所有以p开头的名称。迄今为止,我的代码尝试有:

* awk '$1~"^(" s ")$"{print $2}' RS=\< FS=\> s="Name" sdlcproxy1diff.xml -- shows me all "Name" items.| 
* xpath datastore.xml '/CLIOutput/Data/Row/*[self::Name]/text()' datastore.xml 2>/dev/null -- shows all "Name" items, but output is horrible.  

提前谢谢

您可能需要研究一个名为“xmlstarlet”的免费应用程序。谷歌就是这样。它非常强大,尽管语法可能有点难以掌握。除了它可以做的许多事情之外,它还可以从XML树中提取字段,并在一行中打印它们,这样您就可以在标准的linux shell脚本中sed/awk/grep它们

例如:

xmlstarlet sel -t -m /CLIOutput/data/Row -n -v "concat(Name,',',Type,',',Accessible,',',Hosts)"
这将为您提供XML的CSV转换输出。 在此阶段,您可以使用管道和“egrep”查找名称以P开头的任何行:

grep -E '^P'

希望这会有所帮助。

预期的输出将是一个.xml或.csv文件,然后我可以对其运行CLI命令。我知道我仍然需要处理循环和whileread.do以及所有这些问题,但我甚至无法通过导出lol的糟糕信息。这是我在尝试运行命令时收到的错误。XPath错误:无效的表达式concatName,,,,Type,,,Accessible,Hosts^编译错误:xsl的元素值:的值:无法编译选择表达式'concatName',','Type','Accessible','Hosts','I必须稍微清理一下您文章中的输入。然后更改为:cat intput.xml | xmlstarlet sel-t-m/CLIOutput/Data/Row-n-v concatName',,Type',,Accessible',,Hosts-gives:PROD3_A2_LUN10,VMFS,Yes,esx01s112等。很抱歉,我给出的示例命令中缺少两个逗号。我已经做了编辑来清理它。
grep -E '^P'