我有这样的XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <List> <Job id="1" name="John/> <Job id="2" name="Zack"/> <Job id="3" name="Bob"/> </List>
我想创build一个bash脚本,它从一个特定的名字中提取id号码。 例如,请求约翰将出1。有什么办法可以做到这一点?
解析XML文件时,请使用能够理解 xml的工具。 你可以使用xmlstarlet
:
例如说:
xmlstarlet sel -t -v "/List/Job[@name=\"John\"]/@id" file.xml
会产生
1
顺便说一句,你的输入是不正确的。 你有一个缺少的报价
<Job id="1" name="John/>
它应该是
<Job id="1" name="John"/>
尝试类似
#!/bin/bash name="$1" while read -r line; do [[ $line =~ "name=\"$name\"" ]] && [[ $line =~ "Job id=\""([^\"]+) ]] && echo "${BASH_REMATCH[1]}" done < file
例如,如果file
是你的XML和约翰是固定的。
> ./abovescript John 1 > ./abovescript Zack 2 > ./abovescript Bob 3