2009-05-13 13 views
11

यदि मैं एक स्ट्रिंग का उपयोग कर एक स्ट्रिंग का उपयोग कर पाठ की एक सूची काटना चाहता हूं, तो क्या यह संभव है? उदाहरण के लिए मैं एक निर्देशिका है जहाँ शेल स्क्रिप्ट की एक सूची ही पर्ल स्क्रिप्ट कॉल कहनाक्या यूनिक्स कट कमांड में एक डिलीमीटर के रूप में एक स्ट्रिंग का उपयोग करना संभव है?

abc.pl 

तो जब मैं उस निर्देशिका में

$grep abc.pl * 

करते हैं, यह मुझे निम्न परिणाम

xyz.sh: abc.pl 1 2 
xyz2.sh: abc.pl 2 
mno.sh: abc.pl 3 
pqr.sh: abc.pl 4 5 
देता है

मैं मूल रूप से "abc.pl" के बाद सभी आउटपुट चाहता हूं (यह जांचने के लिए कि अभी कौन से रेंज तर्कों को पर्ल पर पास किया जा रहा है)

जब मैं

$grep abc.pl * | cut -d'abc.pl' -f2 

या

$grep abc.pl * | cut -d'abc\.pl' -f2 

की कोशिश की अपनी मुझे दे

cut: invalid delimiter 

जब मैं कटौती के लिए आदमी को पढ़ यह कहा गया

परिसीमक एक बहु हो सकता है बाइट चरित्र।

मैं यहां गलत क्या कर रहा/व्याख्या कर रहा हूं?

+0

खेद तो वे समझ ... यह मुझे निम्न परिणाम xyz.sh देता बनाने: abc।pl 1 2 xyz2.sh: abc.pl 2 mno.sh: abc.pl 3 pqr.sh: जब मैं करने की कोशिश की abc.pl 4 5 ... $ ग्रेप abc.pl * | कटौती -d'abc.pl '-f2 या $ ग्रेप abc.pl * | कटौती -d'abc.pl '-f2 अपने दे रही है मुझे कटौती: अवैध सीमांकक ... आशा है कि नई लाइनों इस समय काम :) –

+0

नहीं :(यकीन नहीं क्यों दर्ज की गई के रूप में अपनी नहीं दिखा रहा नई-पंक्तियों :( –

+0

आप शून्य उपयोग के उदाहरण के साथ आदमी पृष्ठों मतलब वास्तव में जिस तरह से मैं परिणाम दिखाने के लिए यह उम्मीद कर रहा हूँ काम नहीं कर यह स्पष्ट कर दूं नहीं था? – Chance

उत्तर

6

जब मैं कटौती के लिए आदमी को पढ़ता हूं तो यह कहता है कि ... डेलीम एक बहु-बाइट चरित्र हो सकता है।

मल्टी-बाइट, लेकिन केवल एक वर्ण, स्ट्रिंग नहीं।

canti:~$ ll | cut --delimiter="delim" -f 1,2 
cut: the delimiter must be a single character 
Try `cut --help' for more information. 

canti:~$ cut --version 
cut (GNU coreutils) 5.97 

आप (इस मामले में बेकार) स्ट्रिंग के रूप केवल उत्पादन परिसीमक निर्दिष्ट कर सकते हैं:

--output-delimiter=STRING               
     use STRING as the output delimiter the default is to use the input delimiter 
+0

धन्यवाद एलेक्स को देखकर हल नहीं किया जाता है .... –

5

क्यों grep abc.pl | awk '{print $3, $4}' का उपयोग नहीं?

+0

। इसका आंशिक सूची दिखा ... जिस तरह से साथ क्या गलत मैं उपयोग कर रहा हूँ भी उत्सुक हूँ कटौती? –

+0

मैं वास्तव में कभी नहीं का उपयोग किया है कटौती। आपका काम awk या पर्ल के लिए चिल्लाता है! – alamar

+0

कूल ... धन्यवाद alamar ... लेकिन मैं एलेक्स के जवाबी कार्रवाई के लिए सही जवाब दे रहा हूँ, के रूप में वह वास्तव में जवाब मैं क्या देख रहा था के लिए। मेरी इच्छा है कि दो उत्तरों का चयन करने का कोई तरीका था ... लेकिन फिर यह कई अन्य जांच का कारण बन जाएगा। तो आपकी मदद के लिए धन्यवाद। वास्तव में इसकी सराहना करें :) –

0

$ ग्रेप abc.pl * | कटौती -d '' -f3-999

उस मामले में सिर्फ परिसीमक के रूप में अंतरिक्ष चरित्र का उपयोग करें।

+1

'999' शामिल करने के लिए कोई ज़रूरत नहीं है - बस है' -d कटौती '' - f3-'। – jnylen

0

या आप कोशिश कर सकते हैं जैसे रूबी:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last' 
3

इस का उपयोग करें।

$grep abc.pl * | awk -F 'abc.pl' '{print $2}' 

एफ FS --field-विभाजक इनपुट क्षेत्र विभाजक (एफएस पूर्वनिर्धारित चर के मूल्य) के लिए FS उपयोग FS। ऊपर स्वरूपण lemme सही कुछ लाइनों के लिए