2013-03-01 40 views
31

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?

Trả lời

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

hoặc

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

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

+1

Cách béo nhất để làm điều đó là gì? cắt, sed hoặc khác? – Fabich

3

này nên làm việc:

your_str='GenFiltEff=7.092200e-01' 
echo $your_str | cut -d "=" -f2 
2
${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.

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

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 
+7

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

+0

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

+0

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

Các vấn đề liên quan