Формирование отчета из вывода bash

Формирование отчета из вывода bash

В настоящее время я пытаюсь написать скрипт на Bash, который может запустить набор модульных/интеграционных тестов. Эта часть у меня работает, но теперь мне нужно вывести сводку в конце. Я пытался использовать grepot для захвата каждой строки, содержащей число, за которым следует строка 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}квантификатор используется для сопоставления одной или нескольких цифр. Обратные косые черты необходимы для придания фигурным скобкам их особого значения.

Связанный контент