2011-11-10 9 views
5

पावरहेल का उपयोग करते हुए, XML एक्सोड की सामग्री जैसे फाइलों में मुझे बहु-पैटर्न पैटर्न कैसे मिलेगा?फाइलों में बहु-रेखा पैटर्न खोजने के लिए पावरहेल का उपयोग

यानी अगर मैं शब्द "हरी" deviceDescription नोड के भीतर देख रहे थे, लेकिन एक्सएमएल नोड पाठ कई पंक्तियों अवधि सकता है, यह काम नहीं करता:

dir -r -i *.xml | select-string -Pattern "<deviceDescription>.*green.*</deviceDescription>" 

उत्तर

9

सबसे पहले, यदि एक्सएमएल है , डिवाइस विवरण स्ट्रिंग को इस तरह से इलाज करें और उसके बाद इच्छित स्ट्रिंग के लिए मिलान करें, इस मामले में, हरा।

$x = [xml] (gc .\test.xml) 
$x.deviceDescription -match "green" 

आपको लगता है कि जिस तरह से जाने के लिए नहीं करना चाहते हैं, तो आप ?s का उपयोग करना होगा - singleline या dotall ध्वज जो बनाता है * मैच नई पंक्तियां:

$x = [IO.File]::ReadAllText("C:\test.xml") 
$x -match "(?s)<deviceDescription>.*green.*</deviceDescription>" 

ध्यान दें कि आप शायद का उपयोग करना चाहते .*? या यह एकाधिक डिवाइस डिस्क्रिप्शन टैग में फैल सकता है। इस तरह के एज मामलों के कारण हैं कि आपको ऐसी चीजों के लिए रेगेक्स का उपयोग क्यों करना चाहिए।

+0

मैं नोड के पाठ को कैसे आउटपुट कर सकता हूं? मेरे पास यह है: $ x.SelectNodes ("// deviceDescription") | चयन ऑब्जेक्ट नोड –