我想使用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”(没有圆括号)
答案 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(\(.*\))'
匹配括号但未在结果中包含它们。