grep फ़ाइल केवल लाइन के भाग के लिए


2

मेरे पास एक rtf फ़ाइल है जो मैं इस तरह से grep का उपयोग कर रहा हूं

 grep "Order Number" 'Extract Text Output.rtf'

जो इस तरह दिखने वाली लाइनों में परिणत होता है

\b\fs28 \cf2 Fab Order Number : FAB00772450\

और मैं चाहता हूं कि परिणाम सिर्फ FAB00772450 हो

मुझे पता है कि अगर मैं इसका इस्तेमाल करता हूं तो यह "ऑर्डर नंबर" शब्द वापस कर देगा लेकिन इससे मुझे मदद नहीं मिलती


क्या यह stackoverflow.com/q/974757/422353 जैसा नहीं है ?

कैसे इस विषय बंद सवाल है? किसी को समझाने कृपया
mcgrailm

उस जागने के लिए पाइपिंग की कोशिश करें, फिर आप इसे विभाजित कर सकते हैं और जो कुछ भी आपको पसंद है उसे कर सकते हैं।
user1200129

जवाबों:


3
cat 'Extract Text Output.rtf' | sed -n 's/Order Number : \(.*\)\\/\1/gp'

पैदावार ठीक वही है जो आप चाहते हैं।

स्पष्टीकरण:

  • sed -n दमन के डिफ़ॉल्ट उत्पादन को दबाने
  • s/.../.../g खोज और बदलें, जी: सब कुछ / विश्व स्तर पर
  • Order Number : \(.*\)\\" Order Number :" स्ट्रिंग के लिए देखें और backslashसमूह 1 के बीच में कुछ भी बचाएं; (sed का उपयोग करने के नकारात्मक पक्ष को regex के ग्रुपिंग ऑपरेटर से बचना है: (...)साथ \(...\))
  • \1 प्रतिस्थापन के रूप में समूह 1 का उपयोग करें
  • p किसी भी मैच अगर प्रिंट प्रतिस्थापन

यह हार्ड-कोडेड awk समूहों ($ 7) का उपयोग करने की तुलना में अधिक लचीला और सामान्य तरीका है।

नोट 1: उपयोग। * यदि आपके पास इस तरह से स्वरूपित लाइनें हैं:

 \cf2 Fab Order Number : FAB00772450\ \b \cf2

यह रेगेक्स को लालची होने से रोकता है और पहले बैकस्लैश पर रुक जाता है। परीक्षण नहीं अगर sed * का समर्थन करता है? और + ऑपरेटरों, लेकिन चलो आशा करते हैं।

नोट 2: यदि आपके पास कई भाग हैं जिन्हें आप एक पंक्ति से निकालना चाहते हैं, तो कई समूहों का उपयोग करें और प्रतिस्थापन स्ट्रिंग में आप उन्हें स्वरूपण के साथ स्विच भी कर सकते हैं, जैसे .../\2 - \1/


2

यह मेरे लिए काम करता है:

grep "Order Number" test.txt | awk {'print $7'} | tr "\\\ " " "

उत्पादन:

FAB00772450


7 क्या करता है?
mcgrailm

मुझे लगता है कि 7 वें कॉलम को प्रिंट करता है। यह व्हॉट्सएप पर बंट जाता है।
user1200129

1
यह 7 वें क्षेत्र को प्रिंट करता है। विभाजन जो कुछ भी एफएस पर है (अंतरिक्ष में चूक)।
स्कॉट सी विल्सन

0

यदि इस प्रारूप का हमेशा पालन किया जाता है, लेकिन टोकन की संख्या हमेशा समान नहीं होती है, तो आप इसे कुछ इस तरह से पाइप कर सकते हैं

sed 's /.*: //' | sed 's # \ # ##' '

इससे "FAB00772450" भी प्राप्त होता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.