2013-01-23 50 views
8

मेरे पास एक एक्सएमएल फ़ाइल है, फाइल एक लाइन से बना है।एसईडी का उपयोग कर रेडएक्स मैचों को प्रिंट करें

जो मैं करने की कोशिश कर रहा हूं वह पुटी के माध्यम से फ़ाइल से "finalNumber" विशेषता मान निकालता है। नोटपैड ++ का उपयोग करके कॉपी और खोज डाउनलोड करने के बजाय।

मैंने एक नियमित अभिव्यक्ति बनाई है जिसे मैंने On-line Tool पर परीक्षण किया है, और इसे sed कमांड duplicate grep functionality पर उपयोग करने का प्रयास किया है। आदेश चलता है लेकिन कुछ भी वापस नहीं करता है।

RegEx:

(?<=finalNumber=")(.*?)(?=") 

sed कमान (रिटर्न कुछ भी नहीं, उम्मीद 28, फ़ाइल निकालने देखें):

sed -n '/(?<=finalNumber=")(.*?)(?=")/p' file.xml 

फ़ाइल निकालें:

...argo:finalizedDate="2012-02-09T00:00:00.000Z" argo:finalNumber="28" argo:revenueMonth=""... 

मुझे लगता है कि मैं पास हूँ (मैं गलत हो सकता था), क्या मैं सही लाइनों पर हूं या आउटपुट हासिल करने का बेहतर तरीका है?

उत्तर

13

यहां पुराने पुराने grep के साथ कुछ भी गलत नहीं है।

grep -E -o 'finalNumber="[0-9]+"' file.xml | grep -E -o '[0-9]+' 

उपयोग -E विस्तारित नियमित अभिव्यक्ति के लिए, और -o केवल मिलान भाग मुद्रित करने के लिए।

+1

इस तथ्य के कारण स्वीकृत यह फ़ाइल में एक से अधिक मैचों, एक अनियंत्रित अनुरोध के दौरान हर घटना देता है। –

1

sed लुक-आगे के दावों का समर्थन नहीं करता है। पर्ल करता है, हालांकि:

perl -ne 'print $1 if /(?<=finalNumber=")(.*?)(?=")/' 
0

जैसा कि मैं समझता हूं, यहां देखने के लिए यहां कोई आवश्यकता नहीं है। इसे एक

sed -n '/finalNumber="[[:digit:]]\+"/p' 
+1

जो मेरी मशीन पर पूरी लाइन प्रिंट करता है। – Perleone

+0

@ पेरेलोन, ज़ाहिर है ... मैं उपेक्षित हूं;) –

2

यह आपके लिए (जीएनयू sed) काम कर सकते हैं:

sed -r 's/.*finalNumber="([^"]*)".*/\1/' file 
4

हालांकि आप पहले से ही एक जवाब का चयन, यहाँ एक तरह से आप में क्या कर सकते हैं शुद्ध sed:

sed -n 's/^.*finalNumber="\([[:digit:]]\+\)".*$/\1/p' <test 

आउटपुट:

28 

यह पूरी लाइन को मैच नंबर और प्रिंट द्वारा प्रतिस्थापित करता है (क्योंकि पी पूरी लाइन प्रिंट करेगा ताकि आपको प्रतिलिपि बनाना पड़े ई पूरी लाइन)