
다음 출력을 어떻게 구문 분석합니까?lein test
$ lein test
lein test nepleaks-engine.core-test
Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
내가 원하는 곳은 failures
bash 스크립트를 사용하기 전에 번호를 얻는 것입니다.
내가 더 잘 아는 것은 grep
,
$ lein test | grep 'failures' | cut -d' ' -f1
0
이 작업을 수행하는 더 좋은 방법을 제안해 주세요.
답변1
귀하의 솔루션은 첫 번째 공백 문자까지 "실패"를 포함하는 모든 줄의 일부를 반환합니다.
좀 더 구체적으로 알고 싶다면 다음과 같이 할 수 있습니다.
sed -n '$s/^\([[:digit:]]\{1,\}\) failures.*/\1/p'
즉, 마지막 줄( $
)만 고려하고 특정 패턴을 따르는 경우에만 고려합니다. 즉, 비어 있지 않은 십진수 시퀀스와 그 뒤에 failures
해당 숫자 시퀀스를 반환합니다.
답변2
failures
출력의 한 줄에서만 발생 한다면 수행하는 방식에는 아무런 문제가 없습니다 . 또 다른 옵션은 실패 횟수가 항상 출력의 4번째 줄에 있다는 사실을 기반으로 하는 것입니다. 다음을 사용하면 매우 쉽습니다 awk
.
lein test | awk 'NR==4 { print $1 }'
failures,
또는 두 번째 필드가 있는 줄에 고정하려면 다음을 수행하세요 .
lein test | awk '$2=="failures," { print $1 }'
또는 마지막 줄에 고정하려면:
lein test | awk 'END { print $1 }'
또는 sed
마지막 줄에 고정하는 데 사용:
lein test | sed -n '$ s/^\([0-9]*\).*/\1/p'
답변3
awk 사용($1 인쇄, 첫 번째 열을 의미):
lein test | grep 'failures' | awk '{print $1}'
답변4
awk를 통해,
lein test | awk '/ failures,/{print $1}'
그리고 GNU를 사용하면 sed
,
lein test | sed -n '/ failures,/s/^\([^ ]\+\).*/\1/p'
또는 이식 가능:
lein test | sed -n '/ failures,/s/^\([^ ]\{1,\}\).*/\1/p'