2016-07-05 3 views
0

정확하게 패턴을 일치시키는 bash에 문제가 있습니다. 예를 들어, "test.bam"과 같은 내 파일 확장자 앞에있는 문자 만 일치시키고 싶지만, "t1st.bam"과 같은 숫자가 포함 된 경우 "st"가 출력됩니다. 내가 할 싶은 무엇bash의 패턴 일치 정확히 일치하기

hello="t1est.bam" 
re="([a-zA-Z]+)\.bam" 


if [[ $hello =~ $re ]]; then 

    result=${BASH_REMATCH[1]} 
else 
    echo "unable to parse string" 
fi 
echo "$result" 

비 알파 문자가 제공되는 경우 모든 패턴과 일치하고로 경기를하려는 경우 '다른'block.Thanks

답변

2

을로 이동하지 않는 것입니다 문자열 시작 부분에서 시작하여 앵커를 추가하십시오.

re='^([a-zA_Z_]+)\.bam' 
+0

이 작동합니다! (^ [.....})와 같이 그룹 안쪽에 놓으면 무슨 뜻인지 물어볼 수 있습니까? –

+0

@ErikR : [정규식에 대한 간략한 소개] (http://www.tldp.org/LDP/abs/html/x17129.html)에서 이에 대해 설명합니다. 캐럿'^'은 행의 시작과 일치 함을 나타내며 '[^ a-d]'는 "not a, b, c 또는 d"를 의미하는 문자 집합을 무효화 할 수도 있습니다. 표현의 중간에있는 캐럿은 대개 의도하지 않은 개행과 일치합니다. –