다음 출력을 어떻게 구문 분석합니까?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'
즉, 마지막 줄( $
)만 고려되며, 특정 패턴을 따르는 경우에만 고려됩니다. 그 뒤에 비어 있지 않은 10진수 시퀀스 failures
(그리고 해당 숫자 시퀀스가 반환됨)가 옵니다.
답변2
failures
이것이 출력의 한 줄에서만 발생하는 한 이 작업을 수행하는 방식에는 아무런 문제가 없습니다. 또 다른 옵션은 실패 횟수가 항상 출력의 네 번째 줄에 있다는 사실을 기반으로 할 수 있습니다. 그것은 간단합니다 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'