2009-03-13 18 views
5

मैं बाद में प्रसंस्करण के लिए [0-9A-Z]+? की सभी घटनाएं प्राप्त करना चाहता हूं। मैंरेगेक्स से सभी मैच कैसे प्राप्त करें?

if [[ `cat file` =~ '[0-9A-Z]+?' ]]; then 
    echo $BASH_REMATCH; 
fi 

कौन सा मुझे पहले मैच देता है, लेकिन मैं फ़ाइल में सभी मैचों को प्रोसेस कर सकता है?

आप

+0

क्या आप को जोड़ने का मतलब है? पैटर्न के अंत में? – Richard

उत्तर

5

धन्यवाद आप एक नियमित अभिव्यक्ति की बस मिलान वाला पाठ प्राप्त करना चाहते हैं, मैं

grep -o 'regex' file 

का प्रयोग करेंगे अपने कोड की भावना में मैं इसे संशोधित करेगा होने की

while read line; do 
    [[ $line =~ regex ]] || continue 
    # do somethinw with $line or $BASH_REMATCH, perhaps put it in an array. 
done < file 

यदि आप एक ही पंक्ति पर एकाधिक regexes से मेल खाना चाहते हैं, तो यहां एक तरीका है।

while read line; do 
    # do somethinw with $line 
done < <(grep -o 'regex' file) 

मुझे लगता है कि आपका रेगेक्स आपके वास्तव में क्या कर रहा है इसका एक सरल उदाहरण माना जाता है। द? सहायक नहीं है और आपके उद्धरण एक शाब्दिक स्ट्रिंग से मेल खाते हैं।

+0

रेगेक्स थोड़ा अधिक जटिल है, +? आलसी होने की जरूरत है। भले ही "जबकि ... किया

+0

क्या होगा अगर एक पंक्ति में रेगेक्स मैच दो बार होता है? मैं इसे कैसे संसाधित कर सकता हूं? –

+0

अद्यतन उत्तर देखें –

संबंधित मुद्दे