
次の出力をどのように解析しますか?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
出力の 1 行にのみ発生するのであれば、実行方法に問題はありませんfailures
。別のオプションとしては、失敗の数が常に出力の 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'