Generando un informe a partir de la salida de bash

Generando un informe a partir de la salida de bash

Actualmente estoy intentando escribir un script en Bash que pueda ejecutar un conjunto de pruebas unitarias/de integración. Tengo esa parte funcionando, pero lo que necesito ahora es poder generar un resumen al final. He estado intentando utilizar grepo tomar cada línea que contiene un número seguido de la cadena failing, guardarla en una variable e imprimirla al final.

Entonces, un ejemplo de una salida fallida es

224 passing (3m)
47 failing

Lo que me gustaría que se imprimiera al final es algo parecido a

service01 4 failing
service03 1 failing

Lo que tengo hasta ahora es:

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

El script anterior no muestra ningún resultado cuando hay pruebas fallidas, lo que me lleva a creer que la culpa es de mi sintaxis grep.

¿Qué estoy haciendo mal?

Respuesta1

El siguiente grepcomando devolverá el resultado requerido:

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

El patrón [0-9]+coincide con uno o más dígitos. La -Eopción debe usarse para que greppueda interpretar el patrón como una expresión regular extendida. El +cuantificador no está definido como parte de las expresiones regulares básicas.

Ejecución de muestra (usando un archivo):

$ cat testfile
224 passing (3m)
47 failing

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

Además, este patrón también se puede implementar utilizando expresiones regulares básicas (BRE) de la siguiente manera:

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

En este caso, el {n,m}cuantificador se utiliza para hacer coincidir uno o más dígitos. Las barras invertidas son necesarias para dar a las llaves su significado especial.

información relacionada