
В настоящее время я пытаюсь написать скрипт на Bash, который может запустить набор модульных/интеграционных тестов. Эта часть у меня работает, но теперь мне нужно вывести сводку в конце. Я пытался использовать grep
ot для захвата каждой строки, содержащей число, за которым следует строка failing
, сохранения ее в переменной и печати в конце.
Итак, пример неудачного вывода:
224 passing (3m)
47 failing
Я бы хотел, чтобы в конце было напечатано что-то вроде
service01 4 failing
service03 1 failing
На данный момент у меня есть следующее:
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
Приведенный выше скрипт не выводит никаких данных при неудачных тестах, что наводит меня на мысль, что проблема в моем синтаксисе grep.
Что я делаю не так?
решение1
Следующая grep
команда вернет требуемый вывод:
grep -E '[0-9]+ failing'
Шаблон [0-9]+
соответствует одной или нескольким цифрам. -E
Опция должна использоваться, чтобы grep
можно было интерпретировать шаблон как расширенное регулярное выражение. +
Квантификатор не определен как часть основных регулярных выражений.
Пример запуска (с использованием файла):
$ cat testfile
224 passing (3m)
47 failing
$ grep -E '[0-9]+ failing' testfile
47 failing
Кстати, этот шаблон также можно реализовать с использованием базовых регулярных выражений (BRE) следующим образом:
$ grep '[0-9]\{1,\} failing' testfile
47 failing
В этом случае {n,m}
квантификатор используется для сопоставления одной или нескольких цифр. Обратные косые черты необходимы для придания фигурным скобкам их особого значения.