Shellscript读取XML属性值

pat*_*vit 5 bash shell awk sed

我们想要从XML文件中读取XML属性.文件内容示例如下:

<properties>
  <property name="abc" value="15"/>
  <property name="xyz" value="26"/>
</properties>
Run Code Online (Sandbox Code Playgroud)

我们想要使用shell脚本读取属性"abc"的值(即15).
请建议使用shell命令来实现此目的.

jay*_*ngh 8

您可以使用正确的XML解析器,如xmllint.如果您的版本支持xpath,则可以非常轻松地获取特定值.如果它不支持xpath,那么你可以使用如下--shell选项:

$ echo 'cat //properties/property[@name="abc"]/@value' | xmllint --shell myxml
/ >  -------
 value="15"
/ > 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用awksed格式化并从输出中提取所需的字段.

$ echo 'cat //properties/property[@name="abc"]/@value' | xmllint --shell myxmlfile | awk -F'[="]' '!/>/{print $(NF-1)}'
15
Run Code Online (Sandbox Code Playgroud)

您可以使用命令替换来捕获变量中的输出,方法是:

$ myvar=$(echo 'cat //properties/property[@name="abc"]/@value' | xmllint --shell myxml | awk -F'[="]' '!/>/{print $(NF-1)}')
$ echo "$myvar"
15
Run Code Online (Sandbox Code Playgroud)

使用除xmlparser之外的任何其他东西都容易出错并且容易破解.