के साथ कुछ करें, मैं रिक्त स्थान पर पाइप की प्रत्येक पंक्ति को विभाजित करना चाहता हूं, और फिर प्रत्येक टोकन को अपनी लाइन पर प्रिंट करना चाहता हूं।पावरशेल के साथ स्प्लिट स्ट्रिंग और प्रत्येक टोकन
मुझे लगता है कि मैं इस परिणाम का उपयोग कर प्राप्त कर सकते हैं:
(cat someFileInsteadOfAPipe).split(" ")
लेकिन मैं और अधिक लचीलापन चाहते हैं। मैं बस प्रत्येक टोकन के साथ कुछ भी करने में सक्षम होना चाहता हूँ। (मैं यूनिक्स पर AWK का उपयोग करते थे, और मैं ही कार्यक्षमता प्राप्त करने के लिए कोशिश कर रहा हूँ।)
मैं वर्तमान में है:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
कौन सा, जाहिर है, केवल पहले टोकन प्रिंट करता है। क्या मेरे लिए टोकन पर प्रत्येक के लिए एक रास्ता है, प्रत्येक बदले में प्रिंटिंग?
इसके अलावा, %{$data = $_.split(" "); Write-Output "$($data[0])"}
भाग मुझे एक ब्लॉग से मिला, और मैं वास्तव में समझ नहीं पा रहा हूं कि मैं क्या कर रहा हूं या वाक्यविन्यास कैसे काम करता है।
मैं इसके लिए Google चाहता हूं, लेकिन मुझे नहीं पता कि इसे क्या कॉल करना है। कृपया मुझे Google या दो शब्दों के साथ Google में मदद करें, या मुझे बताएं कि %
और सभी $
प्रतीकों के साथ-साथ उद्घाटन और समापन ब्रैकेट का महत्व भी है।
मुझे एहसास है कि मैं वास्तव में (cat someFileInsteadOfAPipe).split(" ")
का उपयोग नहीं कर सकता, क्योंकि फ़ाइल (या बेहतर आने वाली पाइप) में एक से अधिक पंक्तियां होती हैं।
कुछ उत्तर के बारे में:
आप Select-String
उपयोग कर रहे हैं tokenizing से पहले उत्पादन फिल्टर करने के लिए, आप को ध्यान में रखने की जरूरत है कि Select-String
आदेश के उत्पादन में तार का एक संग्रह है, लेकिन का एक संग्रह नहीं है MatchInfo
वस्तुओं। स्ट्रिंग आप विभाजित करना चाहते हैं पाने के लिए, तुम इतनी तरह MatchInfo
वस्तु की Line
संपत्ति का उपयोग करने की, जरूरत है:
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}
aaaah, संपादन के लिए धन्यवाद। यह जानकर कि '%' 'foreach-object 'के लिए छोटा है, इसका अर्थ है कि मैं इसे कई पंक्तियों के लिए कर सकता हूं:' cat। \ Tmp.txt | % {$ _। विभाजन ("")} | % {लिखें-आउटपुट "$ ($ _) हैलो"} 'समस्या हल हो गई। –
बिल्कुल सही! मैं खुशी से मदद कर सकता है। आपके आदेश का अंतिम भाग वास्तव में सिर्फ $ "हैलो" हो सकता है। यदि आप स्ट्रिंग के अंदर किसी ऑब्जेक्ट की संपत्ति के मान को विस्तारित करने का प्रयास कर रहे हैं तो आपको केवल $ ($ चर) नोटेशन का उपयोग करने की आवश्यकता है। उदाहरण के लिए "मेरा अंतिम नाम $ ($ person.surname) है।" या cmdlet की विधि का आउटपुट: "" कल की तारीख $ ((गेट-डेट) है। एडडेज़ (1)) "'। –
बस एक नोट: PowerShell v2 के रूप में एक '-प्लिट' ऑपरेटर है जिसका उपयोग सामान्य रूप से व्हाइटस्पेस पर विभाजित करने के लिए किया जा सकता है ('-split $ foo') या समान '।विभाजन ('') ':' $ foo -split '' '। – Joey