2011-05-18 8 views
5

इन तार प्राप्त करें:जावा रेगेक्स और sed एक ही नहीं हैं ...?

00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

जावा में इस exp लागू करें: ^(06700|067|00)([0-9]*)

मेरा इरादा स्ट्रिंग की भिखारी से अग्रणी "06700, 067 और 00" को निकालना है।

यह सब जावा में शांत है, समूह 2 हमेशा नंबर मैं करने का इरादा है, लेकिन sed में यह एक ही नहीं है:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
00543515703528 
00582124628575 
0034911320020 
0034911320020 
005217721320739 
0902345623 
067913187056 
00543515703528 

मैं क्या बिल्ली याद आ रही है?

चीयर्स,

एफ।

उत्तर

5

जब विस्तारित नियमित अभिव्यक्ति का उपयोग कर, आप भी ( और ) से पहले \ छोड़ देते हैं की जरूरत है। यह मेरे लिए काम करता है:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

टिप्पणी भी cat

को एक अलग कॉल के लिए कोई आवश्यकता नहीं है कि
3

मेरा मानना ​​है कि आपकी समस्या यह है:

BRE को एसईडी चूक: डिफ़ॉल्ट sed की व्यवहार बेसिक रेगुलर एक्सप्रेशन (BRE) का समर्थन करने के लिए है। करने के लिए उपयोग रेगुलर एक्सप्रेशन

Source

इस फ़्लैग के बिना, विस्तारित सभी -r (लिनक्स) या ई (BSD) ध्वज सेट यह पेज पर वर्णित सुविधाओं का उपयोग करने के लिए | चरित्र का शाब्दिक अर्थ है। इस उदाहरण का प्रयास करें:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g' 
संबंधित मुद्दे