Bash出力でレポートを生成する

Bash出力でレポートを生成する

私は現在、Bashで一連のユニット/統合テストを実行できるスクリプトを作成しようとしています。その部分はすでに完了していますが、今必要なのは最後に要約を出力できる機能です。私はgrepotを使って数字と文字列を含む各行をつかみ、変数に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つ以上の数字を一致させるために使用されます。中かっこに特別な意味を与えるにはバックスラッシュが必要です。

関連情報