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}수량자는 하나 이상의 숫자를 일치시키는 데 사용됩니다. 중괄호에 특별한 의미를 부여하려면 백슬래시가 필요합니다.

관련 정보