从Linux终端统计XML元素数量

13 投票
7 回答
11961 浏览
提问于 2025-04-16 16:26

我的xml文件大概长这样:

<elements>
<elem>
....bunch of other elements
</elem>
</elements>

有没有办法通过Linux命令行来统计某个xml文件中elem标签出现的次数?比如用perl、python或者其他什么可以用一行命令完成的工具?

我可以试试像grep -c "elem" myfile.xml这样的命令,然后把得到的数字除以2来算出次数,但有没有类似的更简洁的一行命令呢?

补充:

我在寻找替代的grep解决方案。

7 个回答

15

你还可以使用 xmllint 这个工具:

xmllint --xpath "count(//elem)" myfile.xml
15

xml_grep这个工具正好可以满足你的需求——你可以试试下面的命令:

xml_grep --count //elem example.xml

这个工具在Debian和Ubuntu系统的xml-twig-tools软件包里,你可以在这里找到相关文档

0

@OP,所有的 grep 解决方案都有一个根本的“缺陷”,就是如果一行中有多个 <elem> 标签,它们的计数会出错。可以使用 awk 来编程计数。

awk 'BEGIN{
    totalelem=0
    totalendelem=0
}
/<elem>/{
    m = split($0,a,"<elem>") # or m = gsub(/<elem>/,"")
    totalelem+=m-1
}
/<\/elem>/{
    m = split($0,b,"</elem>") # or m = gsub("</elem>","")
    totalendelem+=m-1
}
END{
    print "Total elem tags: " totalelem
    print "Total end elem tags: " totalendelem
    # if you want to make sure each elem tag is enclosed  by corresponding end elem tag
    if ( totalelem == totalendelem ){
        print "Equal start and end tags"
    }
}
' file

这个解决方案假设你知道你的 elem 标签是什么样子的。没有 <elem /> 或者那些带有额外属性的标签。

撰写回答