sed - 使用正则表达式 (REGEX) 从coverage.py 中获取总覆盖率的值
问题描述
这个问题基本上是关于如何使用正则表达式,但我在很多非常密切相关的问题中找不到任何答案。
我在 gitlab 管道中使用coverage.py和py.test创建了覆盖率报告,这些报告看起来像下面这样通过管道传输到一个文件中coverage37.log
:
-------------- generated xml file: /builds/utils/foo/report.xml --------------
---------- coverage: platform linux, python 3.7.11-final-0 -----------
Name Stmts Miss Cover
-------------------------------------------------
foo/tests/bar1.py 52 0 100%
...
foo/tests/bar2.py 0 0 100%
-------------------------------------------------
TOTAL 431 5 99%
======================= 102 passed, 9 warnings in 4.35s ========================
现在我想为总覆盖率创建一个徽章,即这里的 99% 值,并且只获取数字 (99) 以便将其分配给变量。然后,此变量可用于使用anybadge包创建灵活的覆盖范围徽章。
我天真的方法是这样的:
COVERAGE_SCORE=$(sed -n 'what to put here' coverage37.log)
echo "Coverage is $COVERAGE_SCORE"
请注意,我知道 gitlab、github 等提供了自动创建徽章的特定功能。但我想手动创建它,以便获得更多控制权并为每个分支创建徽章。
欢迎任何提示。提前致谢!
解决方案
这里更容易使用awk
:
cov_score=$(awk '$1 == "TOTAL" {print $NF+0}' coverage37.log)
这里$1 == "TOTAL"
匹配第一个单词作为的行TOTAL
并print $NF+0
打印最后一个字段的数字部分。
推荐阅读
- reactjs - 如何结合 map 和 setState
- c++ - 使用向量 push_back 时出错
在 C++ 中 - php - php排序分组数组
- typescript - TypeScript 模块增强(再次...)
- angular - ng5-slider 拖动时不更新表单控件值
- reactjs - 编译失败。webpack 不是函数
- javascript - 如何从一个动作中分派另一个动作并在 Vuex 中分派另一个动作
- java - 避免名称的重复扫描仪输入
- c# - 像 LINQPad 一样从数据库自动生成 DbContext
- mainframe - 如何在 Easytrieve 内部 SORT 中加入记录?