Gerando um relatório a partir da saída do bash

Gerando um relatório a partir da saída do bash

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 greppegar 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 grepcomando retornará a saída necessária:

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

O padrão [0-9]+corresponde a um ou mais dígitos. A -Eopção deve ser usada para que grepse 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.

informação relacionada