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