एक स्ट्रिंग चर में Nth शब्द


85

बैश में, मैं एक चर द्वारा एक स्ट्रिंग पकड़ का Nth शब्द प्राप्त करना चाहता हूं।

उदाहरण के लिए:

STRING="one two three four"
N=3

परिणाम:

"three"

बैश कमांड / स्क्रिप्ट यह क्या कर सकता है?

जवाबों:


95
echo $STRING | cut -d " " -f $N

3
जब फ़ील्ड मौजूद नहीं होता है तो अनुरोध करने पर कटौती विफल हो जाएगी। "" वापस करने के बजाय यह स्ट्रिंग को वापस लौटा देगा। उदाहरण: गूंज "आआआ" | cut -f2 परिणाम "आआआ" है, शून्य शून्य लंबाई परिणाम नहीं।
अंजस्केल

@ याजास्केल ऐसा लगता है जब इनपुट में सीमांकक नहीं पाया जाता है। और वह व्यवहार आजकल विकल्प का उपयोग करके बदल दिया जा सकता है - अकेला-सीमांकित।
सामुली पहाजा

64

एक विकल्प

N=3
STRING="one two three four"

arr=($STRING)
echo ${arr[N-1]}

3
इसके लिए bash सरणियों का उपयोग करना "सबसे अच्छा" समाधान है, मुझे awk या sed का उपयोग करने से नफरत है, क्योंकि मैं उन्हें सभी सेटअपों पर विशेष रूप से msys सेटअप पर स्थापित नहीं देखता हूं।
सुंदर

1
भले ही गूंज "आवश्यक नहीं है", मैंने इसे समझने के लिए उपयोगी पाया कि कैसे गिरफ्तार तत्वों का उपयोग किया जाए। धन्यवाद
चेन ली योंग

1
यदि आपने IFS(आंतरिक क्षेत्र विभाजक) को सफेद स्थान के बजाय ':' या कुछ पर सेट किया है, तो इसे आज़माने से पहले इसे बदल दें।
नौमेनन

1
यह सही उत्तर होना चाहिए। इस उद्देश्य के लिए सरणियों का उपयोग करना सरल और चतुर दोनों है।
अंजस्केल

31

का उपयोग करते हुए awk

echo $STRING | awk -v N=$N '{print $N}'

परीक्षा

% N=3
% STRING="one two three four"
% echo $STRING | awk -v N=$N '{print $N}'
three

9

एक फाइल जिसमें कुछ कथन हैं:

cat test.txt

परिणाम :

This is the 1st Statement
This is the 2nd Statement
This is the 3rd Statement
This is the 4th Statement
This is the 5th Statement

तो, इस स्टेटमेंट प्रकार के 4 वें शब्द को प्रिंट करने के लिए:

cat test.txt |awk '{print $4}'

आउटपुट:

1st
2nd
3rd
4th
5th

2
ओपी का कहना है कि स्ट्रिंग एक चर में है, न कि फ़ाइल में।
कोडफ़ेस्टर

3

कोई महंगा कांटा नहीं, कोई पाइप नहीं

$ set -- $STRING
$ eval echo \${$N}
three

लेकिन ग्लोबिंग से सावधान रहें।


2
STRING=(one two three four)
echo "${STRING[n]}"

2
आपके उदाहरण में, क्या STRING वास्तव में एक स्ट्रिंग है? यह एक सरणी की तरह दिखता है।
निकोलस राउल

@ नाइकोलस रौल हां वास्तव में आप सही कह रहे हैं। लेकिन मैंने एक विकल्प के रूप में लिखा है।
mnrl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.