2012-05-17 14 views
5

के साथ बैश के साथ स्प्लिट स्ट्रिंग उदाहरण के लिए, मेरे पास एक स्ट्रिंग है: [email protected]प्रतीक

मुझे इस स्ट्रिंग के test2 भाग प्राप्त करने की आवश्यकता है। मैं इसे बैश के साथ कैसे कर सकता हूं?

+1

संभव डुप्लिकेट [बैश में स्ट्रिंग हेरफेर। । । अग्रणी अनुभाग को हटा रहा है] (http://stackoverflow.com/questions/2680274/string-manipulation-in-bash-removing-leading-section) – Kaz

उत्तर

19

Parameter Expansion का उपयोग करना:

str='[email protected]' 
echo "${str#*@}" 
  1. # चरित्र कहते हैं पैटर्न मिलान विस्तार की सबसे छोटी उपसर्ग निकालें।
  2. % चरित्र का अर्थ पैटर्न से मेल खाने वाले विस्तार के सबसे छोटे प्रत्यय को हटा दें। (तो तुम "${str%@*}" कर सकते हैं "test1" हिस्सा मिलता है।)
  3. / चरित्र का मतलब है निम्नलिखित पैटर्न मिलान विस्तार में सबसे छोटी और पहली स्ट्रिंग निकालें। बैश में यह है, लेकिन यह पॉज़िक्स नहीं है।

यदि आप पैटर्न चरित्र को दोगुना करते हैं तो यह लालची से मेल खाता है।

  1. ## साधन पैटर्न मिलान विस्तार के सबसे बड़े उपसर्ग निकालें।
  2. %% का अर्थ है पैटर्न से मेल खाने वाले विस्तार का सबसे बड़ा प्रत्यय निकालें।
  3. // का अर्थ है पैटर्न मिलान के विस्तार के सभी सबस्ट्रिंग को हटा दें।
+0

test2 के बजाय test1 प्रिंट करने के लिए मैं इसे कैसे बदलूं? –

+0

@ChrisF मैंने यह दिखाने के लिए अपना जवाब विस्तारित किया है कि यह कैसे करें। – kojiro

3
echo "[email protected]" | sed 's/.*@//' 
+2

या, bash में, 'xxx = "test1 @ test2"; sed's s.*@// '<<< $ x'। –

+0

@ जोनाथन लेफ्लर मुझे पता है कि आपका मतलब क्या है, लेकिन क्या आप कुछ 'x'es नहीं खो रहे हैं? – kojiro

+0

हम्म ... हाँ, ऐसा लगता है कि 'डॉस इक्विस' बच निकला। टिप्पणी संपादित करने में थोड़ा देर हो चुकी है ... –

5

बैश में एक और तरीका है: के

[email protected] read left right <<< "$string" 
echo "$right" 
संबंधित मुद्दे