उपयोग sed
बजाय grep
:
echo 12345 | sed -n '/^\([0-9]\{1,4\}\).*/s//\1/p'
इस लाइन की शुरुआत में 4 अंक, कुछ भी द्वारा पीछा करने के लिए ऊपर से मेल खाता है, बस अंक रहता है, और उन्हें प्रिंट करता है। -n
अन्यथा मुद्रित होने से लाइनों को रोकता है। यदि अंक स्ट्रिंग भी मध्य-रेखा दिखाई दे सकती है, तो आपको थोड़ी अधिक जटिल कमांड की आवश्यकता होती है।
असल में, आदर्श रूप से आप पीसीआर नियमित अभिव्यक्तियों के साथ sed
का उपयोग करेंगे क्योंकि आपको वास्तव में एक गैर-लालची मैच की आवश्यकता है। हालांकि, एक उचित सन्निकटन अप करने के लिए, आप का उपयोग कर सकते हैं: (! एक काफी अधिक जटिल समस्या को एक अर्ध-समाधान ... अब हटा दिया)
आप पर अप करने के लिए 4 अंक की पहली स्ट्रिंग चाहते हैं के बाद से लाइन, बस sed
का उपयोग किसी भी गैर अंक दूर करने के लिए और उसके बाद अंकों स्ट्रिंग प्रिंट:
echo abc12345 | sed -n '/^[^0-9]*\([0-9]\{1,4\}\).*/s//\1/p'
इस गैर अंक 1-4 अंक कुछ भी द्वारा पीछा के बाद की एक स्ट्रिंग से मेल खाता है, बस अंक, और प्रिंट रहता है उन्हें।
स्रोत
2012-03-03 03:59:20
यह काम करता है! लेकिन अगर मैं पाया तो पहले मैच के बाद मैं वास्तव में grep को मिलान से कैसे रोकूं? बस उत्सुक। – abc
-m पहला मैच मिलने के बाद grep को मिलान से नहीं रोकता है। – abc
सबसे पहले मैंने -एम फ्लैग को शामिल करने के लिए अपना उत्तर संपादित किया जो आपके प्रश्न में पहले से ही था, ug। -एम 1 का उपयोग करके खोज को केवल पहली पंक्ति में सीमित कर दिया जाएगा और सिर फ़िल्टर करेगा जो अभ्यास में बहुत अच्छा होना चाहिए। –