2010-06-07 15 views
23

का उपयोग करके एक सबस्ट्रिंग निकालें PowerShell का उपयोग करके मैं एक सबस्ट्रिंग कैसे निकाल सकता हूं?PowerShell

मैं इस स्ट्रिंग है ...

"-----start-------Hello World------end-------" 

मैं निकालने के लिए है ...

Hello World 

ऐसा करने के लिए सबसे अच्छा तरीका क्या है?

उत्तर

13

Substring विधि हमें प्रारंभिक स्थिति और लंबाई के आधार पर मूल स्ट्रिंग से एक विशेष स्ट्रिंग निकालने का एक तरीका प्रदान करता है। यदि केवल एक तर्क प्रदान किया जाता है, तो इसे प्रारंभिक स्थिति माना जाता है, और स्ट्रिंग का शेष आउटपुट होता है।

PS > "test_string".Substring(0,4) 
Test 
PS > "test_string".Substring(4) 
_stringPS > 

link text

लेकिन यह आसान है ...

$s = 'Hello World is in here Hello World!' 
$p = 'Hello World' 
$s -match $p 

और अंत में, केवल .txt फ़ाइलों का चयन और "नमस्ते दुनिया" की घटना के लिए खोज एक निर्देशिका के माध्यम से recurse करने:

dir -rec -filter *.txt | Select-String 'Hello World' 
+2

+1: लेकिन एक regex क्या आरंभ और समाप्ति टैग के बीच कब्जा बेहतर उदाहरण होगा "----- शुरू करें ------- (। +?) ------ अंत -------" (अनस्टेस्ट रेगेक्स, और मैं कोई रेगेक्स गुरु नहीं हूं) –

26

-match ऑपरेटर एक regex का परीक्षण करती है, इसके साथ गठबंधन जादू चर $matches अपने परिणाम प्राप्त करने के

PS C:\> $x = "----start----Hello World----end----" 
PS C:\> $x -match "----start----(?<content>.*)----end----" 
True 
PS C:\> $matches['content'] 
Hello World 

जब भी regex-y चीजों के बारे में संदेह में, इस साइट की जाँच: http://www.regular-expressions.info

+4

मेरे पास नहीं था शक्तियों में regex कर सुराग यह सीधा था! बहुत बहुत धन्यवाद!!! PowerShell में – xdhmoore

+0

नियमित अभिव्यक्ति अद्भुत है। –

+0

जब मैं इसे आज़माता हूं तो मुझे "सत्य" नहीं दिखाई देता है, लेकिन पूरी लाइन के रूप में मैं इसे एक बहु रेखा विविध (पिंग के बाहर रखकर) पर कोशिश कर रहा हूं। तो एक सिंगल पिंग कर रहा हूं और उत्तर को सहेज रहा हूं, फिर मैं सिर्फ इस लाइन को खोजना चाहता हूं "14 9 .155.224.1 से जवाब: बाइट्स = 32 समय <1ms टीटीएल = 128" और आईपी एड्रेस निकालें। आपके पास कोई विचार है? – DevilWAH

2

बिल्डिंग मैट जवाब पर, यहाँ एक है कि नई-पंक्तियों में खोज करता है और संशोधित करने के लिए आसान है अपने उपयोग के लिए

$String="----start----`nHello World`n----end----" 
$SearchStart="----start----`n" #Will not be included in results 
$SearchEnd="`n----end----" #Will not be included in results 
$String -match "(?s)$SearchStart(?<content>.*)$SearchEnd" 
$result=$matches['content'] 
$result 

-

नोट: यदि आप किसी फ़ाइल के खिलाफ इस चलाना चाहते हैं को ध्यान में रखना Get-सामग्री फिर से एक सरणी को एक स्ट्रिंग नहीं बदलता है। आप इस के आसपास निम्न कार्य करके काम कर सकते हैं:

$String=[string]::join("`n", (Get-Content $Filename)) 
+0

उपयोग करना आसान है - या केवल फ़ाइल का उपयोग करके पढ़ें।नेट विधियों – 4c74356b41

-2

के बाद से स्ट्रिंग जटिल नहीं है, रेगुलर एक्सप्रेशन से तार जोड़ने की आवश्यकता नहीं। एक साधारण मैच चाल

$line = "----start----Hello World----end----" 
$line -match "Hello World" 
$matches[0] 
Hello World 

$result = $matches[0] 
$result 
Hello World 
+6

ज्ञात स्ट्रिंग निकालना व्यर्थ है, क्योंकि आप पहले ही स्ट्रिंग को जानते हैं। – Swonkie

1

अन्य समाधान

$template="-----start-------{Value:This is a test 123}------end-------" 
$text="-----start-------Hello World------end-------" 

$text | ConvertFrom-String -TemplateContent $template 
अगर यह कुशल है या नहीं, लेकिन PowerShell में तार एक में, सरणी सूचकांक सिंटैक्स का उपयोग करने के लिए भेजा जा सकता है
+0

मन उड़ाया। पावरशेल के पास ऐसे पागल कार्य हैं –

1
PS> $a = "-----start-------Hello World------end-------" 
PS> $a.substring(17, 11) 
     or 
PS> $a.Substring($a.IndexOf('H'), 11) 
+0

$ a.Substring (argument1, argument2) - यहां तर्क 1 = वांछित वर्णमाला और argument2 की स्थिति शुरू करना = आउटपुट के रूप में इच्छित सबस्ट्रिंग की लंबाई। यहां 17 वर्णमाला 'एच' की अनुक्रमणिका है और चूंकि हम हैलो वर्ल्ड तक प्रिंट करना चाहते हैं, हम 11 को दूसरे तर्क के रूप में प्रदान करते हैं। –

3

सुनिश्चित नहीं हैं कि क्या करेंगे पाइथन के लिए समान फैशन।

यह नहीं पूरी तरह से सहज क्योंकि सच के पहले अक्षर index = 0 से जाना जाता है, लेकिन यह करता है:

  • एक त्रुटि
  • पैदा करने के बिना, एक दूसरे इंडेक्स नंबर स्ट्रिंग से अधिक लंबी है कि अनुमति दें स्ट्रिंग के अंत से रिवर्स
  • निकालें सबस्ट्रिंग में
  • निकालें सबस्ट्रिंग

एच (सूचक मान स्पष्टता के लिए शामिल - उत्पादन में उत्पन्न नहीं)

PS > 'Hello World'[0..2] 

परिणाम पैदावार: पहले कुछ उदाहरण हैं

H [0] 
e [1] 
l [2] 

कौन सा -join '' पास करके अधिक उपयोगी बनाया जा सकता है:

PS > 'Hello World'[0..2] -join '' 
Hel 

विभिन्न सूचकांक का उपयोग करके आप कुछ दिलचस्प प्रभाव प्राप्त कर सकते हैं:

आगे

दूसरे सूचकांक मान का उपयोग करें जो दूसरे से कम है और सबस्ट्रिंग आगे की दिशा में निकाला जाएगा जैसा आप उम्मीद करेंगे। इस बार दूसरे इंडेक्स मान दूर स्ट्रिंग की लंबाई से अधिक है लेकिन कोई त्रुटि है:

PS > 'Hello World'[3..300] -join '' 
lo World 

के विपरीत:

PS > 'Hello World'.Substring(3,300) 
Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within 
the string. 

पिछड़ों

आप एक दूसरे सूचकांक मूल्य की आपूर्ति तो यह पहले से कम है, स्ट्रिंग को रिवर्स में वापस कर दिया गया है:

PS > 'Hello World'[4..0] -join '' 
olleH 

समाप्ति

आप ऋणात्मक संख्याओं आप स्ट्रिंग के अंत से एक पद के का उल्लेख कर सकते का उपयोग करते हैं से। 'World' निकालने के लिए, पिछले 5 पत्र, हम का उपयोग करें:

PS > 'Hello World'[-5..-1] -join '' 
World