Mam ciąg znaków, który wygląda tak:pobiera ciąg znaków po znaku
GenFiltEff=7.092200e-01
Korzystanie bash, chciałbym po prostu numer po znaku =
. Czy jest jakiś sposób na zrobienie tego?
Mam ciąg znaków, który wygląda tak:pobiera ciąg znaków po znaku
GenFiltEff=7.092200e-01
Korzystanie bash, chciałbym po prostu numer po znaku =
. Czy jest jakiś sposób na zrobienie tego?
cut -d "=" -f 2 <<< "$your_str"
lub
sed -e 's#.*=\(\)#\1#' <<< "$your_str"
To powinno działać:
your_str='GenFiltEff=7.092200e-01'
echo $your_str | cut -d "=" -f2
${word:$(expr index "$word" "="):1}
że dostaje 7
. Zakładając, że masz na myśli całą resztę napisu, po prostu zostaw :1
.
echo "GenFiltEff=7.092200e-01" | cut -d "=" -f2
Użyj rozszerzenia parametrów, jeśli wartość jest już zapisana w zmiennej.
$ str="GenFiltEff=7.092200e-01"
$ value=${str#*=}
Albo użyć read
$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01"
czy inaczej,
$ echo $value
7.092200e-01
Jeśli ciąg ma więcej niż jeden "=": '$ {str ## * =}, aby uzyskać od ostatniego dopasowania. $ {str # * =}, aby uzyskać od pierwszego dopasowania. $ {str %% = *}, aby uzyskać aż do pierwszego dopasowania. $ {str% = *}, aby dostać się do ostatniego meczu. " [String Manipulation @ tldp.org] (http://tldp.org/LDP/abs/html/string-manipulation.html) – lepe
Nie dostałem drugie rozwiązanie do pracy: '$ IFS =" = "odczytaj wartość nazwy <<<" GenFiltEff = 7.092200e-01 "' używając bash 4.4.5 – sn1ckers
Działa dobrze dla mnie w 4.4.5. Jeśli jednak nie możesz rozwiązać problemu, otwórz nowe pytanie, które zawiera wynik, jaki * otrzymasz *. – chepner
Dobry dla prostych przypadkach jednak te metody nie gra dobrze, gdy więcej niż jeden w "=" jest strunowy. Pierwsze rozwiązanie Chepnera jest proste i bardziej niezawodne. – lepe
Jaki jest najsmutniejszy sposób na zrobienie tego? cięte, sed lub inne? – Fabich