다른 명령의 출력에서 ID를 추출해야 합니다. 현재 내 추출 명령은 다음과 같습니다.
someID=$(command | grep -oP '(?:^Successfully\sbuilt\s)([\da-z]{12}$)' | grep -oP '([a-z\d]{12})')
명령 출력의 예:
---> Using cache
---> 9b4624927fa6
Successfully built 9b4624927fa6
예상되는 결과:
9b4624927fa6
행에서 추출된 ID
Successfully built 9b4624927fa6
이 두 개의 grep 문을 하나로 결합하려면 어떻게 해야 합니까?
답변1
내 첫 번째 창작물을 약간 수정했습니다 grep
.
$ grep -oP '^Successfully\sbuilt\s\K[\da-z]{12}$' example-output
9b4624927fa6
\K
PCRE에서게임을 재설정하여 시작하세요:
이스케이프 시퀀스로
\K
인해 이전에 일치한 문자가 최종 일치 시퀀스에 포함되지 않습니다.
너비가 0인 긍정적인 뒤돌아보기 어설션과 유사합니다 (?<=Successfully...
.
답변2
로 시작하는 줄 끝의 16진수를 얻으려면 Successfully built
다음을 사용할 수 있습니다 sed
.
sed -n -E 's/^Successfully built ([[:xdigit:]]+)$/\1/p'
그러면 일치하는 줄이 해시로 바뀌고 인쇄됩니다(다른 줄은 제외).
또는 awk
:
awk '/^Successfully built [[:xdigit:]]+$/ { print $NF }'
그러면 정규식과 일치하는 각 줄의 마지막 공백으로 구분된 필드가 인쇄됩니다.
두 정규식 모두에서 [[:xdigit:]]+
해당 표현식은 비어 있지 않은 16진수 문자열과 일치합니다.