从测试报告中提取失败次数

从测试报告中提取失败次数

我将如何解析以下输出lein test

$ lein test
lein test nepleaks-engine.core-test

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.

我想要的是在failures使用 bash 脚本之前获取数字。

我只知道更好的是grep

$ lein test | grep 'failures' | cut -d' ' -f1
0 

建议我更好的方法来做到这一点。

答案1

您的解决方案返回每行中包含“失败”的部分,直到第一个空格字符。

如果你想更具体,你可以这样做:

sed -n '$s/^\([[:digit:]]\{1,\}\) failures.*/\1/p'

也就是说,仅考虑最后一行 ( $),并且仅当它遵循特定模式时:后跟任何非空的十进制数字序列 failures(并返回该数字序列)。

答案2

failures只要这只发生在输出的一行上,您执行此操作的方式就没有问题。另一种选择可能是基于这样一个事实:失败次数始终位于输出的第四行。这很容易awk

lein test | awk 'NR==4 { print $1 }'

failures,或者锚定在第二个字段所在的线上:

lein test | awk '$2=="failures," { print $1 }'

或者锚定在最后一行:

lein test | awk 'END { print $1 }'

或者使用sed锚定在最后一行:

lein test | sed -n '$ s/^\([0-9]*\).*/\1/p'

答案3

使用 awk (打印 $1,表示第一列):

lein test | grep 'failures' | awk '{print $1}'

答案4

通过awk,

lein test | awk '/ failures,/{print $1}'

有了GNU sed

lein test | sed -n '/ failures,/s/^\([^ ]\+\).*/\1/p'

或者便携式:

lein test | sed -n '/ failures,/s/^\([^ ]\{1,\}\).*/\1/p'

相关内容