【问题标题】:How to extract value from xml file using grep如何使用 grep 从 xml 文件中提取值
【发布时间】:2020-11-18 15:25:34
【问题描述】:

我有一个如下的 XML 文件

<?xml version="1.0" ?>
<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.7606" lines-covered="270" lines-valid="355" timestamp="1595999208833" version="5.2.1">
    <!-- Generated by coverage.py: https://coverage.readthedocs.io -->
    <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
    <sources>
        <source>/home/lebanon/appt</source>
    </sources>
    <packages>
        <package branch-rate="0" complexity="0" line-rate="1" name="application">
            <classes>
                <class branch-rate="0" complexity="0" filename="application/__init__.py" line-rate="1" name="__init__.py">
                    <methods/>
                    <lines>
                        <line hits="1" number="23"/>
                    </lines>
                </class>
            </classes>
        </package>
</coverage>

我想检索标签内的线速值。 如何使用 grep 来实现?

【问题讨论】:

  • 恕我直言,专家总是建议使用 xmlstarlet、xmlint 等工具来处理 xml 文件。因为他们很好地理解 xmls。所以请让我们知道您的系统中是否有这些工具可用?如果没有,你能得到它们吗?因为只有这样,我们才能得到答案,干杯。
  • 另外,建议用户在 SO 上添加他们为解决自己的问题所做的努力,所以请在您的问题中添加相同的内容,然后让我们知道。
  • grep -oP '&lt;coverage.*line-rate=\K"0.[0-9][0-9][0-9][0-9]"' coverage.xml 我使用了这个命令,我得到输出“0.7606”。如何删除引号?
  • man tr。它有一个删除字符的选项。

标签: xml bash sed grep


【解决方案1】:

你不应该使用 grep 解析 xml(虽然你可以),所以使用 xmllint 你可以这样做

xmllint --xpath '/coverage/@line-rate' file.xml

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2015-05-26
    • 1970-01-01
    • 2021-06-15
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多