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