मैंने बहुत लंबे समय से बैश नहीं लिखा है और मैं इस समस्या का सबसे अच्छा समाधान निकालने की कोशिश कर रहा हूं। मुझे लगता है कि sed या awk इस्तेमाल किया जाएगा लेकिन मुझे यकीन नहीं है कि कैसे।

मेरे पास यह एक्सएमएल फ़ाइल है:

<Projects>
  <Project Guid="46824750-4e2d-46bd-bb6d-7c229cde63d5" Name="Example 1" Type="1" LastModified="2020-09-28T20:44:35.36Z" Version="36.0" />
  <Project Guid="d1137da2-041c-1f3e-a92b-48b2db9663c8" Name="Example 2" Type="5" LastModified="2020-03-24T21:19:48.517Z" Version="5.0" />
  <Project Guid="46824750-4c2d-49c5-8a6c-2c229cff63d5" Name="Example 3" Type="2" LastModified="2020-01-03T18:14:05.047Z" Version="3.2" />
</Projects>

एक बैश स्क्रिप्ट में, मुझे उस लाइन को ढूंढना होगा जिसमें टाइप = "1" हो, और उसी लाइन से उस ग्रिड को निकालें। ध्यान दें कि प्रत्येक xml फ़ाइल में केवल एक में टाइप = "1" होगा। क्या इसके लिए सेड का इस्तेमाल किया जा सकता है? या मुझे एक एक्सएमएल पार्सिंग रूट जाना होगा?

मैं वास्तव में अतिरिक्त निर्भरता या पुस्तकालय स्थापित नहीं कर सकता क्योंकि यह जेनकिंस एजेंट पर चल रहा है और निर्भरताओं को स्वीकृत करने की प्रक्रिया लंबी और सख्त है। यह आदर्श रूप से बैश/यूनिक्स कार्यक्षमता में निर्मित के साथ किया जाएगा।

इसके लिए सर्वोत्तम दृष्टिकोण पर कोई विचार?

0
Connor Schwinghammer 22 पद 2020, 21:19
1
यदि यह कोड उत्पादन में जा रहा है, तो मैं बहुत दृढ़ता से xsltproc का उपयोग करने का सुझाव दूंगा।
 – 
l0b0
22 पद 2020, 23:04

1 उत्तर

सबसे बढ़िया उत्तर

हालांकि नौकरी के लिए सबसे अच्छा उपकरण नहीं है, लेकिन sed कैन का उपयोग किया जा सकता है। प्रयास करें

sed -n '/Type="1"/s/.*Guid="\([^"]*\).*/\1/p' file.xml

जीएनयू सेड 4.8 . के साथ परीक्षण किया गया

1
Thomas Hansen 22 पद 2020, 22:58
क्या बेहतर होगा? मुझे केवल कुछ ऐसा चाहिए जो इस विशिष्ट उपयोग के मामले को विश्वसनीय रूप से निष्पादित कर सके, और कुछ नहीं
 – 
Connor Schwinghammer
22 पद 2020, 23:40
1
एक्सएमएल को संभालते समय आमतौर पर xmlstarlet जैसे निर्दिष्ट एक्सएमएल टूल की सिफारिश की जाती है, लेकिन इस मामले में sed समाधान पर्याप्त है।
 – 
Thomas Hansen
23 पद 2020, 01:04