यदि आपके पास जीएनयू जीआरईपी है, तो आप -o
रेगेक्स की खोज करने के लिए इसके विकल्प का उपयोग कर सकते हैं और केवल मिलान वाले भाग को आउटपुट कर सकते हैं । (अन्य grep कार्यान्वयन केवल पूरी लाइन दिखा सकते हैं।) यदि एक पंक्ति में कई मैच हैं, तो वे अलग-अलग लाइनों पर मुद्रित होते हैं।
grep -o '\[[0-9]*\]'
यदि आप केवल अंक चाहते हैं और कोष्ठक नहीं, तो यह थोड़ा कठिन है; आपको शून्य-चौड़ाई के दावे का उपयोग करने की आवश्यकता है: एक regexp जो खाली स्ट्रिंग से मेल खाता है, लेकिन केवल अगर यह पूर्ववर्ती है, या जैसा कि मामला हो सकता है, एक ब्रैकेट द्वारा अनुसरण किया जाता है। शून्य-चौड़ाई के दावे केवल पर्ल सिंटैक्स में उपलब्ध हैं।
grep -P -o '(?<=\[)[0-9]*(?=\])'
सीड के साथ, आपको प्रिंटिंग को बंद करना होगा -n
, और पूरी लाइन से मिलान करना होगा और केवल मिलान वाले भाग को बनाए रखना होगा। यदि एक पंक्ति में कई संभावित मैच होते हैं, तो केवल अंतिम मैच मुद्रित होता है। यहाँ पर sed का उपयोग करने के बारे में अधिक जानकारी के लिए आसपास के वर्णों को प्रिंट किए बिना 'sed' के साथ मिलान किए गए एक रेगेक्स को देखें ।
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
या यदि आप केवल अंक चाहते हैं और कोष्ठक नहीं:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
बिना grep -o
, पर्ल यहां पसंद का उपकरण है यदि आप कुछ ऐसा चाहते हैं जो सरल और सहज दोनों है। प्रत्येक पंक्ति ( -n
) पर, यदि रेखा में कोई मेल है \[[0-9]*\]
, तो उस मिलान ( $&
) और एक नई पंक्ति ( ) को प्रिंट करें -l
।
perl -l -ne '/\[[0-9]*\]/ and print $&'
यदि आप केवल अंक चाहते हैं, तो समूह में परिसीमन करने के लिए कोष्ठक लगाएं, और केवल उस समूह को प्रिंट करें।
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS यदि आप केवल कोष्ठक के बीच एक या एक से अधिक अंकों की आवश्यकता चाहते हैं, तो परिवर्तन [0-9]*
करें [0-9][0-9]*
, या [0-9]+
पर्ल में।
[number]
" का मतलब है[0-9]