如何从XML文件中接收特定条目的数量?

时间:2014-02-21 21:56:20

标签: xml bash

XML文件包含公司的部门和用户,旁边还有其他一些评论。用户数量不同,也是用户之后的最后一条评论:

 <department="marketing" id="983343" >
   <options="yes" />
   <prefix="m" />
   <country="de" />
   <user="MaierM" />
        .
        .
        .
   <user="SchulzP" />
   <success="yes" />
 </department>
 <department="sales" id="353934" >
   <options="yes" />
   <prefix="s" />
   <country="at" />
   <user="MullerS" />
        .
        .
        .
   <user="NowakA" />
   <directory="direct" />
 </department>

我的问题是:如果我想获得基于id(这里:983343)转储在变量中的部门用户数 - 什么是bash-command(不能使用Python)?另请注意,id可能存在于XML文件内的另一个点,具有不同的时间含义。

1 个答案:

答案 0 :(得分:2)

var=`sed -n '/department=..* id="983343"/,/<\/department>/p' file | grep -c '<user="'`

首先,我告诉sed在特定部门的开头和结束标记之间打印行。

结果通过管道传输到grep,查找带有user标记的行,但计算它们而不是打印它们(-c选项)。

整个命令放在反引号中,因此您可以使用命令替换将计数捕获到变量中。