2010-11-18 11 views
40

मैं टेक्स्ट फ़ाइल में बड़े बदलाव करते समय नियमित रूप से (query-replace-regexp "from" "to") अभिव्यक्ति का उपयोग करता हूं।Emacs, उन सभी लाइनों को हटा रहा है जो मेल नहीं खाते हैं?

मिलान नहीं होने वाली सभी पंक्तियों को हटाने के लिए, यदि कोई मौजूद है, तो मैं एक नियमित अभिव्यक्ति चाहता हूं। उदाहरण के लिए, एक आरपीएम बनाने के लिए रेडहाट एसपीईसी फ़ाइल में मैं बस उन पंक्तियों को छोड़ना चाहता हूं जो /^Patch/ से शुरू होते हैं (और सभी गैर मेलिंग लाइनों को हटाएं)। grep -E '^Patch' के साथ पर्याप्त आसान है लेकिन क्या Emacs में कोई तरीका है?

मैंने कोशिश की:

(query-replace-regexp "^\\(?!Patch\\)[^\r\n]*$" "") 

कोई लाभ नहीं हुआ (नकारात्मक-अग्रदर्शी असमर्थित दिखाई देता है)।

कोई विचार?

उत्तर

76

एम एक्स रखने लाइनों^पैच बजाय का प्रयास करें:

(keep-lines REGEXP &optional RSTART REND INTERACTIVE)

regexp के लिए उन युक्त मैचों को छोड़कर सभी लाइनों को हटा दें।

वहाँ भी विपरीत आदेश है, एम एक्स फ्लश लाइनों है, जो एक regexp मिलान लाइनों को हटा।

+0

यह काम किया, धन्यवाद! –

4

तो यह सिर्फ "पैच" आप देख रहे हैं, तो आप

^([^P]|P[^a]|Pa[^t]|Pat[^c]|Patc[^h])[^\r\n]*$ 

मैं मानता का उपयोग करके ^Patch मिलान नहीं लाइनों की पहचान कर सकते हैं, यह नहीं बल्कि बदसूरत है, हालांकि है। =)

+0

Haha .. इसे प्यार करता हूँ! –

17

उपयोग M-x delete-non-matching-lines और M-x delete-matching-lines

+0

यह काम किया, धन्यवाद! –

+8

'डिलीट-गैर-मेलिंग-लाइन' के लिए प्रलेखन बताता है कि यह 'रख-लाइन' और 'डिलीट-मिलान-लाइन' के लिए उपनाम है 'फ्लश-लाइन' के लिए उपनाम है। –

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

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