
Atualmente estou tentando escrever um script no Bash que possa executar um conjunto de testes de unidade/integração. Tenho essa parte funcionando, mas o que preciso agora é poder gerar um resumo no final. Tenho tentado grep
pegar cada linha que contém um número seguido pela string failing
, salvá-la em uma variável e imprimi-la no final.
Portanto, um exemplo de saída com falha é
224 passing (3m)
47 failing
O que eu gostaria que fosse impresso no final é algo como
service01 4 failing
service03 1 failing
O que tenho até agora é:
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
O script acima não mostra nenhuma saída quando há falhas nos testes, o que me leva a acreditar que a culpa é da minha sintaxe grep.
O que estou fazendo de errado?
Responder1
O seguinte grep
comando retornará a saída necessária:
grep -E '[0-9]+ failing'
O padrão [0-9]+
corresponde a um ou mais dígitos. A -E
opção deve ser usada para que grep
se possa interpretar o padrão como uma expressão regular estendida. O +
quantificador não é definido como parte das expressões regulares básicas.
Exemplo de execução (usando um arquivo):
$ cat testfile
224 passing (3m)
47 failing
$ grep -E '[0-9]+ failing' testfile
47 failing
Além disso, esse padrão também pode ser implementado usando expressões regulares básicas (BRE) da seguinte maneira:
$ grep '[0-9]\{1,\} failing' testfile
47 failing
Neste caso, o {n,m}
quantificador é usado para combinar um ou mais dígitos. As barras invertidas são necessárias para dar às chaves seu significado especial.