सवाल चरित्र के बाद स्ट्रिंग प्राप्त करें [डुप्लिकेट]


इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास एक स्ट्रिंग है जो इस तरह दिखती है:

 GenFiltEff=7.092200e-01

बैश का उपयोग करके, मैं सिर्फ संख्या के बाद ही प्राप्त करना चाहता हूं = चरित्र। क्या इसे करने का कोई तरीका है?


44
2018-03-01 01:18


मूल




जवाब:


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

या

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

46
2018-03-01 01:21



सरल मामलों के लिए अच्छा है, हालांकि स्ट्रिंग में एक से अधिक "=" होने पर ये विधियां अच्छी तरह से नहीं चलती हैं। चेपरर का पहला समाधान सरल और अधिक विश्वसनीय है। - lepe
ऐसा करने का सबसे मोटा तरीका क्या है? कट, sed या अन्य? - Fabich


यदि मान पहले से ही एक चर में संग्रहीत है, तो पैरामीटर विस्तार का उपयोग करें।

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

या प्रयोग करें read

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

किसी भी तरह से,

$ echo $value
7.092200e-01

55
2018-03-01 02:09



यदि स्ट्रिंग में एक से अधिक "=" है: ${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. [स्ट्रिंग मैनिपुलेशन @ tldp.org] (tldp.org/LDP/abs/html/string-manipulation.html) - lepe
मुझे काम करने का दूसरा समाधान नहीं मिला: $ IFS="=" read name value <<< "GenFiltEff=7.092200e-01" बैश 4.4.5 का उपयोग कर - sn1ckers
4.4.5 में मेरे लिए ठीक काम करता है। यदि आप समस्या का पता नहीं लगा सकते हैं, हालांकि, कृपया एक नया प्रश्न खोलें जिसमें परिणाम शामिल है कर प्राप्त। - chepner
यह अच्छा होगा अगर इस जवाब ने खुद को और विस्तार से समझाया। प्रत्येक में वास्तव में क्या करते हैं #*= यहाँ करो - buildsucceeded
# ऑपरेटर पैटर्न से मेल खाने वाले सबसे कम उपसर्ग को छोड़ देता है *= के विस्तार से $str। - chepner


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

11
2018-03-01 01:26





यह काम करना चाहिए:

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

4
2018-03-01 01:19





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

वह हो जाता है 7। मान लीजिए कि आप स्ट्रिंग के बाकी हिस्सों का मतलब है, बस छोड़ दें :1


2
2018-03-01 01:23