2016-07-26 4 views
0
나는 다음 몇 가지 문자열 패턴에 일치하고 변수에 일치하는 저장 여부를 확인하기 위해 sed를 사용할

:SED는 둥근 괄호 bash는 대체

function tst2(){ 
    string='cms(1.2;1.5;1.3)' 
    regex='cms\(.*\)' 
    echo -e $string 

    if [[ $string =~ $regex ]] 
    then 
     myVar=$(echo -e $string | sed "s/cms\(.*\)/\1/g") 
     echo $myVar 
    else 
     echo "too badd!!!" 
    fi 
} 

콘솔 출력 :

[[email protected]~]$ tst2 
cms(1.2;1.5;1.3) 
(1.2;1.5;1.3) 

나는이 될 myVar에 싶습니다 "1.2, 1.5, 1.3"(둥근 괄호없이)

+3

'myVar에 = $ (나오지를 <<< " $ string ")' – 123

+0

더 많은 인용문 사용 – Sorpigal

+0

변수를 따옴표로 묶고 작은 따옴표로 스크립트를 구분합니다 (이중이 아님). –

답변

1

myVar=$(expr $string : $regex)

이것은 쉘의 기본 제공 expr을 사용하여 원하는대로 할 것입니다. 결과에 포함되지 않습니다 아직 브래킷을 일치

regex='cms(\(.*\))'

: 당신에게,하지만 당신의 정규식을 조정해야합니다.

2

이것은 sed를 사용하지 않고도 더 빠른 방법입니다. 그것은 BASH_REMATCH 변수는 = ~ 연산자가 사용될 때 충전 내장 배쉬 사용한다. 'S/CMS (\ (* \))/\ 1/g'

function tst2(){ 
    string='cms(1.2;1.5;1.3)' 
    regex='cms\((.*)\)' 
    echo -e $string 

    if [[ $string =~ $regex ]] 
    then 
     echo ${BASH_REMATCH[1]} 
    else 
     echo "too badd!!!" 
    fi 
} 
+0

변수를 인용하십시오 .... –