bash - Shellscript 读取 XML 属性值

标签 bash shell awk sed

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

<properties>
  <property name="abc" value="15"/>
  <property name="xyz" value="26"/>
</properties>

我们想使用 shell 脚本读取属性“abc”的值(即 15)。
请建议 shell 命令来实现这一点。

最佳答案

您可以使用合适的 XML 解析器,例如 xmllint。如果您的版本支持 xpath,将很容易获取特定值。如果它不支持 xpath,那么你可以像这样使用 --shell 选项:

$ echo 'cat //properties/property[@name="abc"]/@value' | xmllint --shell myxml
/ >  -------
 value="15"
/ > 

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

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

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

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

使用除 xmlparser 之外的任何其他东西很容易出错并且很容易崩溃。

关于bash - Shellscript 读取 XML 属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508512/

相关文章:

linux - 为什么我的程序在安装在 Linux 中的 NTFS 分区上运行时,其核心转储始终为零字节?

bash - 如何用AWK计算梯度

linux - 将 Windows 批处理文件移植到 shell 脚本。如果可能的话并行执行任务

linux - 在 linux 命令行中的一个命令中多次使用 xargs

unix - awk/sed : replace all fields if any field matches a pattern

bash - 在 bash 中显示空列(固定宽度和空格分隔)的列

linux - 在bash中使用awk检索字符之间的字符串并分配给新变量

bash - 使用 sed 将变量打印到文件末尾

regex - foo[E1,E2,...]* glob 匹配所需的内容,但 foo[E1,E2,...]_* 不匹配?

bash - 在 bash 中处理超出范围的整数