2012-05-25 10 views
5

मैं एक बैश स्क्रिप्ट लिख रहा हूं जो एक कमांड निष्पादित करेगा और एक स्ट्रिंग चर में मान संग्रहीत करेगा, अब मुझे कुछ वर्णों के बाद स्ट्रिंग को विभाजित करने की आवश्यकता है। क्या उधर रास्ता है? मैं सीमांकक उपयोग नहीं कर सकते coz प्रारूप इसअक्षरों की कुछ संख्या के बाद bash में स्ट्रिंग को विभाजित करने की आवश्यकता

PV Name /dev/sda2 
    PV Size 10.39 GB 

यहाँ मैं/dev/sda2 और 10.39 जीबी प्राप्त करने की आवश्यकता की तरह थोड़े है (यदि संभव हो तो सिर्फ अकेले 10.39) और एक नई फ़ाइल में लिखने। मैं डेलीमीटर का उपयोग नहीं कर सकता क्योंकि अंतरिक्ष पहले है .. मैंने बहुत बैश स्क्रिप्टिंग नहीं किया है। क्या इसे करने का कोई तरीका है? (शून्य आधारित)

+6

मैं अपने सीमांकक बाधा समझ में नहीं आता। 'Awk' {प्रिंट $ 3} 'काम नहीं है? यदि नहीं, तो '$ 3' के बजाय' 4 $' के बारे में क्या? – mouviciel

उत्तर

6
echo "${var:8}" 

चरित्र 8 पर शुरू $var की सामग्री गूंज होगा।

पहला अंतरिक्ष में शुरू कुछ भी बंद पट्टी करने के लिए:

data=${var:8} 
echo "${data%% *}" 
3

केवल विशेष केरेक्टर्स पाने के लिए, का उपयोग cut:

$ echo '1234567' | cut -c2-5 
2345 

हालांकि, आपके मामले में awk बेहतर विकल्प की तरह दिखता है:

$ echo ' PV Size 10.39 GB' | awk '{ print $3 }' 
10.39 

यह टेक्स्ट को स्पेस/टैब से अलग कॉलम के रूप में पढ़ता है एनएस, तो यह बिल्कुल ठीक काम करना चाहिए

2

आप cut इस्तेमाल कर सकते हैं:

$ echo "PV Name /dev/sda2" |cut -d " " -f 3 
/dev/sda2 
संबंधित मुद्दे