2011-04-09 11 views
16

मैं Line B या Line C में के रूप में नहीं फ़ाइलें कि इस तरह के नीचे Line A में के रूप में दो शब्दों, word_1 और word_2 क्रम में, शामिल हैं में लाइनों को खोजने के लिए चाहते हैं, लेकिन:पावती regex: एक ही पंक्ति में क्रम में दो शब्द मिलान

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 .... 
Line C: ... word_2 .... 

मैं

$ack '*word_1*word_2' 
$ack '(word_1)+*(word_2)+' 

की कोशिश की है और ^ के साथ एक ही आदेशों regex की शुरुआत में संलग्न (पर्ल regex वाक्य रचना का पालन करने की कोशिश में)।

इन आदेशों में से कोई भी फाइल या लाइनों मैं में दिलचस्पी लौट आते हैं।

क्या मैं गलत कर रहा हूँ?

धन्यवाद!

उत्तर

31

आप word_1, किसी भी समय, किसी भी समय, word_2 के बाद, कुछ भी ढूंढना चाहते हैं। यही कारण है कि होना चाहिए

word_1.*word_2 

आप * का उपयोग करने की क्योंकि यह अक्सर कमांड लाइन खोजों में प्रयोग किया जाता है लगते हैं, लेकिन regexes में यह पिछले चरित्र के लिए एक परिमाणक है, जिसका अर्थ मैच इसे कम से कम 0 बार। उदाहरण के लिए, regex a* 0 या अधिक a एस से मेल खाता है, जबकि regex a+ कम से कम एक a से मेल खाता है।

regex metacharacter जिसका अर्थ है 'कुछ भी मेल खाते हैं ". है, इसलिए .* का अर्थ है" कुछ भी, कितनी भी बार मेल खाते हैं। विषय पर एक संक्षिप्त परिचय के लिए perlrequick देखें।

+0

धन्यवाद @dsolimano! वहाँ के बीच कोई अंतर नहीं होगा आपने जो लिखा और: '। * word_1। * word_2'। यदि नहीं, तो क्यों? –

+1

सॉर्ट करें, लेकिन जो भी आप देख रहे हैं उसके लिए नहीं। इससे अतिरिक्त रूप से लाइन पर 'word_1' से पहले सब कुछ मिल जाएगा। अगर आप देख रहे थे जो मेल खाता है, उसके विपरीत, यदि आप मिलान करते हैं या नहीं, तो आप मैच में और अधिक सामान देखेंगे। अगर आपके पास कुछ नकद और समय है, तो मैं फ्रेडल द्वारा "मास्टरिंग नियमित अभिव्यक्तियों" को पढ़ने की सिफारिश करता हूं, यह उत्कृष्ट है। – dsolimano

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