bash出力からレポートを生成する

bash出力からレポートを生成する

現在、Bash で一連のユニット/統合テストを実行できるスクリプトを作成しようとしています。その部分は機能していますが、今必要なのは、最後に要約を出力できるようにすることです。grep数字とそれに続く文字列を含むすべての行を取得しfailing、それを変数に保存し、最後に出力することを試みています。

失敗した出力の例は次のようになります

224 passing (3m)
47 failing

最後に印刷したいのは次のようなものです

service01 4 failing
service03 1 failing

これまでのところ、次のものがあります:

OUTPUT=""
for service in ${array[*]}
do
  echo $service
  if [ $DO_API == 'true' ]
  then
    echo 'running API tests'
    OUTPUT+="$service API $(docker exec -it $service npm run api_test | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi

  if [ $DO_CI == 'true' ]
  then
    echo 'running CI tests'
    OUTPUT+="$service CI $(docker exec -it $service npm run ci | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi
  echo $'\n'
done

上記のスクリプトでは、失敗したテストがある場合に出力が表示されないため、grep 構文に問題があると考えられます。

何が間違っているのでしょうか?

答え1

次のgrepコマンドは必要な出力を返します。

grep -E '[0-9]+ failing'

パターンは[0-9]+1 つ以上の数字と一致します。パターンを拡張正規表現として解釈する-Eには、オプションを使用する必要があります。量指定子は、基本正規表現の一部として定義されていません。grep+

サンプル実行(ファイルを使用):

$ cat testfile
224 passing (3m)
47 failing

$ grep -E '[0-9]+ failing' testfile
47 failing

ちなみに、このパターンは、次のように基本正規表現 (BRE) を使用して実装することもできます。

$ grep '[0-9]\{1,\} failing' testfile
47 failing

この場合、{n,m}量指定子は 1 つ以上の数字を一致させるために使用されます。中括弧に特別な意味を与えるには、バックスラッシュが必要です。

関連情報