Tôi có một chuỗi mà trông như thế này:Nhận chuỗi sau khi nhân vật
GenFiltEff=7.092200e-01
Sử dụng bash, tôi muốn chỉ nhận được số sau khi nhân vật =
. Có cách nào để làm việc này không?
Tôi có một chuỗi mà trông như thế này:Nhận chuỗi sau khi nhân vật
GenFiltEff=7.092200e-01
Sử dụng bash, tôi muốn chỉ nhận được số sau khi nhân vật =
. Có cách nào để làm việc này không?
cut -d "=" -f 2 <<< "$your_str"
hoặc
sed -e 's#.*=\(\)#\1#' <<< "$your_str"
này nên làm việc:
your_str='GenFiltEff=7.092200e-01'
echo $your_str | cut -d "=" -f2
${word:$(expr index "$word" "="):1}
mà được các 7
. Giả sử bạn có nghĩa là toàn bộ phần còn lại của chuỗi, chỉ cần rời khỏi :1
.
echo "GenFiltEff=7.092200e-01" | cut -d "=" -f2
Sử dụng mở rộng tham số, nếu giá trị đã được lưu trữ trong một biến.
$ str="GenFiltEff=7.092200e-01"
$ value=${str#*=}
Hoặc sử dụng read
$ IFS="=" read name value <<< "GenFiltEff=7.092200e-01"
Dù bằng cách nào,
$ echo $value
7.092200e-01
Nếu chuỗi có nhiều hơn một "=": '$ {str ## * =} để có được từ trận đấu cuối cùng. $ {str # * =} để nhận được từ trận đấu đầu tiên. $ {str %% = *} để nhận được kết quả trùng khớp đầu tiên. $ {str% = *} để nhận được kết quả cuối cùng.' [Chuỗi thao tác @ tldp.org] (http://tldp.org/LDP/abs/html/string-manipulation.html) – lepe
Tôi không nhận được giải pháp thứ hai để làm việc: '$ IFS =" = "đọc giá trị tên <<<" GenFiltEff = 7.092200e-01 "' sử dụng bash 4.4.5 – sn1ckers
Hoạt động tốt cho tôi trong 4.4.5. Tuy nhiên, nếu bạn không thể tìm ra được vấn đề, hãy mở một câu hỏi mới bao gồm kết quả bạn * làm * nhận được. – chepner
tốt đối với trường hợp đơn giản, tuy nhiên những phương pháp này không chơi tốt khi có nhiều hơn một "=" trong chuỗi. Giải pháp đầu tiên của Chepner là đơn giản và đáng tin cậy hơn. – lepe
Cách béo nhất để làm điều đó là gì? cắt, sed hoặc khác? – Fabich