我有像这样的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="social_service_demo" time="0.583">
<testsuite name="demo / generate_access_token" id="60ec54b9-d67b-4f51-a20d-9794c3a85269" tests="2" time="0.583">
<error>
</error>
<testcase name="Token should be generated correctly, response is 200" time="0.583">
<failure type="AssertionFailure">
<![CDATA[Failed 1 times.]]>
</failure>
</testcase>
<testcase name="Returned JSON should contain access_token field" time="0.583">
<failure type="AssertionFailure">
<![CDATA[Failed 1 times.]]>
</failure>
</testcase>
</testsuite>
<testsuite name="demo / get_most_commented_entities" id="12aa656d-a702-4fc6-878c-2e0fde08021e" tests="1" time="0">
<error>
</error>
<testcase name="Response is 200" time="0">
<failure type="AssertionFailure">
<![CDATA[Failed 1 times.]]>
</failure>
</testcase>
</testsuite>
</testsuites>
Run Code Online (Sandbox Code Playgroud)
我需要计算出tests符合这条线的数字:
<testsuite name="demo / generate_access_token" id="60ec5" tests="2" time="0.583">.在这个例子中,我有两个这样的数字:2和1,所以我的输出应该是3.如何在Bash中执行此操作?用grep可以吗?
不要使用grep,sed等同于解析XML/HTML数据 - 它永远不会产生强大和可扩展的结果.
使用适当的XML/HTML处理器,例如xmlstarlet:
xmlstarlet sel -t -v 'sum(//testsuite[@tests]/@tests)' -n input.xml
Run Code Online (Sandbox Code Playgroud)
输出:
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |