次の出力をどのように解析しますか?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'
つまり、最後の行($
)のみが考慮され、特定のパターンに従う場合にのみ考慮されます。その後に空でない10進数のシーケンス failures
(そしてその数のシーケンスが返されます)が続きます。
答え2
failures
これが出力の1行でのみ発生する限り、これを行う方法には問題はありません。別のオプションは、失敗回数が常に出力の4行目にあるという事実に基づいています。それは簡単ですawk
:
lein test | awk 'NR==4 { print $1 }'
failures,
または、2番目のフィールドは次の行に固定されます。
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'