SED在圆括号之间用bash替换

时间:2016-07-26 13:16:56

标签: bash replace sed match brackets

我想使用sed检查某个字符串是否与模式匹配,然后将该匹配保存到变量中:

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
}

控制台输出:

[user@home~]$ tst2
cms(1.2;1.5;1.3)
(1.2;1.5;1.3)

我希望myVar成为“1.2; 1.5; 1.3”(没有圆括号)

2 个答案:

答案 0 :(得分:2)

这是一种更快捷的方式,无需使用sed。当使用=〜运算符时,它使用填充的bash内置BASH_REMATCH变量:

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
}

答案 1 :(得分:1)

myVar=$(expr $string : $regex)

这将做你想要的(使用shell的内置expr)。你需要调整你的正则表达式:

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

匹配括号但未在结果中包含它们。