2016-09-21 8 views
8

से अंतिम पंक्ति मिलती है यदि मेरे पास एक से अधिक पंक्तियों (पाठ) के साथ एक चर है, तो मैं इसे अंतिम पंक्ति कैसे प्राप्त कर सकता हूं?बैश को एक चर

मैं पहले से ही पता लगा कि कैसे पहली पंक्ति पाने के लिए:

STRING="This is a 
multiple line 
variable test" 
FIRST_LINE=(${STRING[@]}) 
echo "$FIRST_LINE" 

# output: 
"This is a" 

शायद वहाँ अंतिम पंक्ति के लिए एक ऑपरेटर होना चाहिए। या कम से कम मुझे लगता है कि @ के साथ पहली पंक्ति आती है।

echo "$STRING" | tail -n1 
+2

आपकी स्क्रिप्ट आउटपुट केवल चर का पहला शब्द है (यह), सभी लाइन नहीं। –

+0

ओह, वह नहीं मिला। शायद क्योंकि मेरे उपयोग के मामले में पहली पंक्ति केवल एक शब्द है। * phew * –

+0

यदि आपको ऐसी कुशलताएं करने की आवश्यकता है, तो स्ट्रिंग में लाइनों को एक सरणी में स्टोर न करें! –

उत्तर

10

बैश स्ट्रिंग जोड़तोड़ का उपयोग करना::

$> str="This is a 
multiple line 
variable test" 

$> echo "${str##*$'\n'}" 
variable test 

${str##*$'\n'} स्ट्रिंग की शुरुआत इस प्रकार केवल छोड़ने से \n तक सबसे लंबे समय तक मैच निकाल देंगे

+2

फिर, दस सेकंड में पीटा! – Inian

+1

वाह। मुझे लगता है कि @ रेडनेब का जवाब मेरे लिए आसान या अधिक सुरुचिपूर्ण दिखता है, लेकिन यह काम करता है और शायद यह करने का "सही" तरीका है। धन्यवाद –

+1

@MattBackslash: यदि आप अधिक पोर्टेबल तरीके की तलाश में हैं, तो यह सही विकल्प है, सभी शैल वेरिएंट – Inian

11

यह करने के लिए एक आसान तरीका है tail उपयोग करने के लिए है इनपुट में अंतिम पंक्ति।

1

आप STRING से प्रत्येक पंक्ति में एक तत्व के साथ एक सरणी चाहते हैं, का उपयोग

readarray -t lines <<< "$STRING" 

फिर, पहली पंक्ति ${lines[0]} होगा, और अंतिम पंक्ति ${lines[-1]} होगा। bash के पुराने संस्करणों में, नकारात्मक सूचकांक की अनुमति नहीं है और आपको अंतिम अनुक्रमणिका मैन्युअल रूप से गणना करना होगा: ${lines[${#lines[@]}-1]}

+1

एक छोटा नोट बता सकता है कि 'बैश 4.x' की आवश्यकता है? – Inian

+0

आईएमओ, 3.x को सिर्फ 'डैश' के बराबर पर पॉज़िक्स-संगत खोल के रूप में माना जाना चाहिए, लेकिन इंटरैक्टिव उपयोग के लिए बेहतर सुविधाओं के साथ। मुझे लगता है कि लगभग 6 वर्षीय 'बैश' 4.2 अब उचित बेसलाइन धारणा जारी करता है। – chepner

+0

अभी भी 'जीएनयू बैश, संस्करण 4.1.2' बीटीडब्ल्यू का उपयोग कर रहा है :), जिसमें यह समर्थित नहीं है। :(विचार उचित संदर्भ के लिए जोड़ने के लिए अच्छा बिंदु होगा। – Inian

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