2016-07-26 28 views
0

Ich möchte sed verwenden, wenn einige String-Match zu einem Muster zu überprüfen und dann das Spiel in eine Variable speichern:SED in bash zwischen runden Klammern ersetzen

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 
} 

Console Ausgabe:

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

ich möchte meineVar werden "1.2; 1.5; 1.3" (ohne die runden Klammern)

+3

'myvar = $ (sed <<<" $ string ")' – 123

+0

Verwenden Sie mehr Zitate – Sorpigal

+0

zitieren Sie Ihre Variablen und begrenzen Sie Skripte mit einfachen Anführungszeichen, nicht doppelt. –

Antwort

1

myVar=$(expr $string : $regex)

Dies wird tun, was Sie wollen (mit der Shell eingebaut expr). Sie benötigen eine regex obwohl anzupassen, zu:

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

, dass die Klammern noch paßt sie nicht im Ergebnis enthalten.

2

Dies ist ein schneller Weg, ohne sed zu verwenden. Es verwendet die Bash-Builtin BASH_REMATCH Variable gefüllt, wenn der Operator = ~ verwendet wird: 's/cm (\ (* \))/\ 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

zitieren Sie Ihre Variablen .... –