從測試報告中擷取失敗次數

從測試報告中擷取失敗次數

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

相關內容