2016-07-15 3 views
3

bash를 사용하면 변수 값이 정규식과 일치하는지 확인할 수 있습니다. 그러나, 나는 일치하는 부분을 반환하는 방법을 찾을 수 없습니다. 이것이 가능한가?bash에서 정규식 일치가 반환됩니다.

예를 들어 $testtest="123456-name-goes-here.1.2.3-something.zip"으로 가져 오십시오. 반환 할 부분은 1.2.3-something입니다.

아래 코드를 사용하면 $test과 성공적으로 일치 할 수 있지만 여기에서 어디로 가야할지 잘 모릅니다.

[[ $test =~ ([0-9]\.[0-9](\.[0-9])?(\.[0-9])?)(-[a-z-]*)? ]] && echo "matched" 
+2

Bash의 문서에서'$ BASH_REMATCH' 변수를 찾으십시오. – Biffen

+0

빙고, 그 트릭을 않습니다. –

답변

5

$BASH_REMATCH[0] 값을 포함 당신이 필요 :

test="123456-name-goes-here.1.2.3-something.zip" 
reg="[0-9]\.[0-9](\.[0-9])?(\.[0-9])?(-[a-z-]*)?" 
if [[ $test =~ $reg ]]; then 
    echo ${BASH_REMATCH[0]}; 
fi 

참조 IDEONE demo

this cheatsheet 참조 :

정규 표현식 캡처는 $BASH_REMATCH${BASH_REMATCH[1]} 사용할 수 있습니다, ${BASH_REMATCH[2]} 등 전체 검색 인덱스 값 = 0, 및 (...) (촬상 기)로 촬영 하였다 submatches cotnain 후속 항목 ${BASH_REMATCH}에 저장된다는 것을 의미

.

+0

고마워, 그게 다야. 나는 SO가 허락하자마자 대답으로 표시 할 것입니다. –

관련 문제