2014-09-23 5 views
6

मैं inet नामक एक चर जो निम्न स्ट्रिंग शामिल है:कई प्रतिस्थापन

inet="inetnum:  10.19.153.120 - 10.19.153.127" 

मैं नीचे अंकन को यह स्ट्रिंग परिवर्तित करने के लिए करना चाहते हैं:

10.19.153.120 10.19.153.127 

मैं आसानी से कर सकता है sed 's/^inetnum: *//;s/^ -//' के साथ इसे प्राप्त करें, लेकिन मैं अधिक कॉम्पैक्ट/सुरुचिपूर्ण समाधान पसंद करूंगा और बैश का उपयोग करूंगा। नेस्टेड पैरामीटर विस्तार या तो काम नहीं करता है:

$ echo ${${inet//inetnum: /}// -/} 
bash: ${${inet//inetnum: /}// -/}: bad substitution 
$ 

कोई अन्य सुझाव? या मुझे इस समय sed का उपयोग करना चाहिए?

उत्तर

8

आप केवल एक समय में एक प्रतिस्थापन कर सकते हैं, तो आप दो चरणों में यह करने की जरूरत है:

newinet=${inet/inetnum: /} 
echo ${newinet/ -/} 
3

रूप में अच्छी तरह bash में एक नियमित अभिव्यक्ति का उपयोग करें:

[[ $inet =~ ([0-9].*)\ -\ ([0-9].*)$ ]] && newinet=${BASH_REMATCH[@]:1:2} 

नियमित अभिव्यक्ति शायद अधिक मजबूत हो सकता है, लेकिन आपके उदाहरण स्ट्रिंग में दो आईपी पते को कैप्चर करना चाहिए। दो कैप्चर समूह अनुक्रम पैरामीटर BASH_REMATCH के अनुक्रमांक 1 और 2 पर क्रमशः पाए जाते हैं और पैरामीटर newinet पर असाइन किए जाते हैं।

संबंधित मुद्दे