2016-07-26 85 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 = $(SED <<<「 $ string「)' – 123

+0

使用更多引用 – Sorpigal

+0

引用您的變量並用單引號分隔腳本,而不是雙引號。 –

回答

1

​​

這會做你想做的事情(使用shell的內建的expr)。您需要調整雖然您正則表達式,以:

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

那括號匹配但不包括它們的結果。

2

這是一個更快的方式,而不必使用sed。它使用內建BASH_REMATCH可變填充時=〜運算符用於在bash: '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

引用你的變量.... –