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