2013-03-01 15 views

risposta

36
cut -d "=" -f 2 <<< "$your_str" 

o

sed -e 's#.*=\(\)#\1#' <<< "$your_str" 
+2

Per i casi semplici, ma questi metodi non giocare bene quando non v'è più di un "=" nel stringa. La prima soluzione di Chepner è semplice e più affidabile. – lepe

+1

Qual è il modo più grasso per farlo? tagliato, sedato o altro? – Fabich

3

Questo dovrebbe funzionare:

your_str='GenFiltEff=7.092200e-01' 
echo $your_str | cut -d "=" -f2 
2
${word:$(expr index "$word" "="):1} 

che ottiene il 7. Supponendo che intendi l'intero resto della stringa, basta lasciare il :1.

8
echo "GenFiltEff=7.092200e-01" | cut -d "=" -f2 
46

Utilizzare l'espansione dei parametri, se il valore è già memorizzato in una variabile.

$ str="GenFiltEff=7.092200e-01" 
$ value=${str#*=} 

Oppure utilizzare read

$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01" 

In entrambi i casi,

$ echo $value 
7.092200e-01 
+7

Se la stringa ha più di un "=": '$ {str ## * =} per ottenere dall'ultima partita. $ {str # * =} per ottenere dalla prima partita. $ {str %% = *} per ottenere fino alla prima partita. $ {str% = *} fino all'ultima partita. [Manipolazione delle stringhe @ tldp.org] (http://tldp.org/LDP/abs/html/string-manipulation.html) – lepe

+0

Non ho ricevuto la seconda soluzione funzionante: '$ IFS =" = "valore nome lettura <<<" GenFiltEff = 7.092200e-01 "' utilizzando bash 4.4.5 – sn1ckers

+0

Funziona bene per me in 4.4.5. Se non riesci a capire il problema, ti preghiamo di aprire una nuova domanda che includa il risultato che * fai * ottieni. – chepner

Problemi correlati