Soru Karakterden sonra ipi al [çoğalt]


Bu sorunun zaten bir cevabı var:

Şuna benzeyen bir dizim var:

 GenFiltEff=7.092200e-01

Bash kullanarak, sadece numarayı almak istiyorum. = karakter. Bunu yapmanın bir yolu var mı?


44
2018-03-01 01:18


Menşei




Cevaplar:


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

veya

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

46
2018-03-01 01:21



Basit durumlar için iyi, ancak bu yöntemler dizede birden fazla "=" olduğunda iyi oynamazlar. Chepner'ın ilk çözümü basit ve güvenilirdir. - lepe
Bunu yapmanın en şişman yolu nedir? kes, sed veya başka? - Fabich


Değer bir değişkende zaten kayıtlıysa, parametre genişletmeyi kullanın.

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

Veya kullan read

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

Öyle ya da böyle,

$ echo $value
7.092200e-01

55
2018-03-01 02:09



Dize birden fazla "=" ise: ${str##*=} to get from the last match. ${str#*=} to get from the first match. ${str%%=*} to get until the first match. ${str%=*} to get until the last match. [String Manipülasyon @ tldp.org] (tldp.org/LDP/abs/html/string-manipulation.html) - lepe
Çalışmak için ikinci çözümü almadım: $ IFS="=" read name value <<< "GenFiltEff=7.092200e-01" bash 4.4.5 kullanarak - sn1ckers
4.4.5'te benim için iyi çalışıyor. Sorunu çözemiyorsanız, lütfen sonucu içeren yeni bir soru açın. yap almak. - chepner
Eğer bu cevap kendini daha ayrıntılı açıkladıysa harika olur. Her biri tam olarak ne yapar #*= burada mı - buildsucceeded
# operatör kalıba uyan en kısa önekini atar *= genişlemesinden $str. - chepner


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

11
2018-03-01 01:26





Bu çalışmalı:

your_str='GenFiltEff=7.092200e-01'
echo $your_str | cut -d "=" -f2

4
2018-03-01 01:19





${word:$(expr index "$word" "="):1}

Bu alır 7. Dizenin geri kalanını kastettiğinizi varsayalım, sadece :1.


2
2018-03-01 01:23