
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 grep
o 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 grep
comando devolverá el resultado requerido:
grep -E '[0-9]+ failing'
El patrón [0-9]+
coincide con uno o más dígitos. La -E
opción debe usarse para que grep
pueda 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.