我将如何解析以下输出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'