उन सभी लाइनों को हटाने के लिए विम का उपयोग करना जो स्ट्रिंग्स के एक मनमाने सेट से मेल खाते हैं


6

मैं सभी लाइनों को हटाने के लिए विम का उपयोग करता हूं, सिवाय इसके कि एक विशेष स्ट्रिंग से मेल खाते हैं, जैसे

: जी! / [स्ट्रिंग है कि मैं संपादक में रहना चाहता हूँ] / डी

बहुत अच्छा काम करता है। लेकिन मैं वास्तव में क्या चाहता हूं, और कहीं भी नहीं मिला है, यह कई तारों को छोड़कर सभी को हटाने के लिए विम का उपयोग करने का एक तरीका है।

उदाहरण के लिए, मान लें कि मेरे पास निम्नलिखित जानकारी वाली एक फ़ाइल है:

Dave came at 12PM
Lucy came at 11AM
Trish came at 5PM
John ate lunch at 2PM
Virgil left at 3PM
Dave left at 6PM

और मैं केवल उन घटनाओं के साथ छोड़ना चाहता हूं जो डेव और जॉन का उल्लेख करते हैं - मैं किस विम कमांड का उपयोग कर सकता हूं:

Dave came at 12PM
John ate lunch at 2PM
Dave left at 6PM

मुझे लगता है कि मैं कमांड लाइन टूल्स का उपयोग कर सकता हूं जैसे विंडोज में और अन्य में * निक्स धन्यवाद!

जवाबों:


13

:globalआदेश है कि आप अपने प्रश्न में संदर्भ वास्तव में सिर्फ शाब्दिक तार नहीं ले करता है, यह किसी भी नियमित अभिव्यक्ति संभालती है। तो, आपको बस एक के साथ आने की जरूरत है जिसमें दो शाखाएं हैं, एक के लिए Johnऔर एक के लिए Dave। देखा:

:g!/Dave\|John/d

ध्यान दें कि यह सरलीकृत मैच भी होगा Johnny; आप शायद मैचों को पूरे कीवर्ड तक सीमित करना चाहते हैं :

:g!/\<\(Dave\|John\)\>/d

नियमित अभिव्यक्ति विम की एक शक्तिशाली विशेषता है; उनके बारे में अधिक जानना सार्थक है। पर आरंभ करें :help regular-expression


1
जब मैंने कोशिश की तो OMG मैं पाइप से बचना भूल गया। मैं अभी करूँगा! धन्यवाद।
डेव

2
कि, या \v"बहुत ही जादुई" संशोधक का उपयोग करें जो आपको लेवेन कीर्सेमेकर्स के उत्तर के रूप में, सबसे बैकस्लैश को छोड़ देता है।
इंगो करकट

वह यह था। मैं अपने regex में सब कुछ बच गया लेकिन किसी तरह पाइप को अनदेखा कर दिया। :)
डेव

1
एक चरित्र को बचाने के लिए, आप :vइसके बजाय उपयोग कर सकते हैं :g!
केविन


0

इसे इस्तेमाल करो:

:%s/^[^Dave|John].*\n//

अर्थ:

%            means search the whole file
^            at the beginning of the line
[^Dave|John] something that isn't Dave nor John
.*           match anything
\n           new line character
//           replace with nothing

3
:sसंपूर्ण लाइनों को हटाने का उपयोग :gप्रश्न से अधिक बोझिल है । और वह [^Dave|John]बकवास है।
इंगो करकट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.