
¿Cómo analizaría el siguiente resultado delein test
$ lein test
lein test nepleaks-engine.core-test
Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
Lo que quiero es obtener el número antes de failures
usar el script bash.
Sólo sé que es mejor grep
,
$ lein test | grep 'failures' | cut -d' ' -f1
0
Sugiérame las mejores formas de hacer esto.
Respuesta1
Su solución devuelve la parte de cada línea que contiene "fallos" hasta el primer carácter de espacio.
Si quieres ser más específico, puedes hacer:
sed -n '$s/^\([[:digit:]]\{1,\}\) failures.*/\1/p'
Es decir, considere solo la última línea ( $
), y solo si sigue un patrón específico: cualquier secuencia no vacía de dígitos decimales seguida de failures
(y devuelve esa secuencia de dígitos).
Respuesta2
No hay nada de malo en la forma en que lo hace, siempre que failures
solo ocurra en una línea de la salida. Otra opción podría ser basarse en el hecho de que el número de fallas siempre está en la cuarta línea de salida. Esto es muy fácil con awk
:
lein test | awk 'NR==4 { print $1 }'
O anclar en una línea donde failures,
está el segundo campo:
lein test | awk '$2=="failures," { print $1 }'
O para anclar en la última línea:
lein test | awk 'END { print $1 }'
O usando sed
para anclar en la última línea:
lein test | sed -n '$ s/^\([0-9]*\).*/\1/p'
Respuesta3
Con awk (imprime $1, significa primera columna):
lein test | grep 'failures' | awk '{print $1}'
Respuesta4
A través de awk,
lein test | awk '/ failures,/{print $1}'
Y con GNU sed
,
lein test | sed -n '/ failures,/s/^\([^ ]\+\).*/\1/p'
O portátil:
lein test | sed -n '/ failures,/s/^\([^ ]\{1,\}\).*/\1/p'