2012-12-23 11 views
11

मैं विशिष्ट निर्देशिका में फ़ाइल नामों का विश्लेषण करने की कोशिश कर रहा हूं। फ़ाइल नाम प्रारूप के होते हैं:पिछले दो टोकन को छोड़कर यूनिक्स कट

token1_token2_token3_token(N-1)_token(N).sh 

मैं '_' परिसीमक का उपयोग करके टोकन काटा, और पिछले दो टोकन को छोड़कर स्ट्रिंग लेने की जरूरत की जरूरत है। उपरोक्त परीक्षा में आउटपुट token1_token2_token3 होना चाहिए।

टोकन की संख्या तय नहीं है। मैंने इसे -f#-cut कमांड के विकल्प के साथ करने की कोशिश की है, लेकिन मुझे कोई समाधान नहीं मिला। कोई विचार?

उत्तर

22

उपयोग कर सकते हैं कटौती के साथ के साथ नहीं किया जा सकता है:

$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev 
t1_t2_t3 

राजस्व प्रत्येक पंक्ति पराजयों। 3--f3- में तीसरे क्षेत्र से लाइन के अंत तक (जो अपरिवर्तित पाठ में तीसरे से आखिरी क्षेत्र के माध्यम से लाइन की शुरुआत है) का अर्थ है।

+0

यह एक आकर्षण की तरह काम करता है: डी और हाँ जैसा सवाल में पूछा गया है कि यह कट कमांड का उपयोग करता है। मैं यह जवाब चुनूंगा। – user613114

+0

ने मेरे प्रश्न का उत्तर दिया http://stackoverflow.com/questions/17644000/how-to-get-second-last-field-from-a-cut-command/17644034?noredirect=1#17644034 भी। धन्यवाद –

+0

मैं इस जवाब के साथ प्यार में गिर गया। मैं rev के अस्तित्व के बारे में भूल रहा हूँ। – norbitheeviljester

3

यह cut, कैसे कभी आप sed या awk

sed -r 's/(_[^_]+){2}$//g' 
5

आप उपयोग कर सकते हैं POSIX परिभाषित पैरामीटर प्रतिस्थापन:

$ name="t1_t2_t3_tn1_tn2.sh" 
$ name=${name%_*_*} 
$ echo $name 
t1_t2_t3 
0

बस एक अलग तरह ysth के जवाब

गूंज "t1_t2_t3_tn1_tn2.sh" लिखने के लिए | राजस्व | कट-डी "_" -f1,2 - पूरक | rev

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