2009-07-22 14 views
29

मेरे पास कुछ पंक्तियों पर स्ट्रिंग "ERROR" के साथ एक लॉग फ़ाइल है। मैं पर हर पंक्ति को हटाना नहीं चाहता में त्रुटि है ताकि मैं केवल फिक्सिंग की आवश्यकता को देख सकूं। मैं vim में निम्नलिखित की तरह कुछ करने के लिए जा रहा था:ऋणात्मक मिलान के साथ regex (यानी, स्ट्रिंग ढूंढें जो _doesn't_ मिलान regex)

% s/(त्रुटि) //

कोई रिक्त स्ट्रिंग के साथ गैर त्रुटि लाइनों को बदलने के लिए।

मैं मानक regexes यह कर सकते हैं कि विश्वास नहीं है, लेकिन शायद मैं गलत हूँ ...

उत्तर

50

हर पंक्ति से मेल नहीं खाता हटाने के लिए :g! आदेश का उपयोग करें।

:g!/ERROR/d 
+23

': v/ERROR/d' बराबर – rampion

0

एक नकारात्मक मिलान regex का उपयोग होगा^ उदाहरण के लिए। [^ ई] ई

+3

समतुल्य है, लेकिन ऐसा रेगेक्स प्रत्येक * चरित्र * से मेल खाएगा जो ई नहीं है, जो सभी * रेखाओं * से मेल खाने से अलग है जिसमें ई शामिल नहीं है। इसके अलावा, ऐसा नकारात्मक चरित्र एक चरित्र से आगे बढ़ने के लिए अजीब है। –

1

के अलावा सब कुछ मेल कराएंगे * nix पर, आप उपयोग कर सकते हैं ग्रेप -v या एक विंडोज़ मशीन पर awk

awk '!/ERROR/' file | more 

, आप

findstr /v /c:ERROR file | more 
8

findstr उपयोग कर सकते हैं Vim में, आप बफर में टेक्स्ट पर कोई फ़िल्टर कमांड चला सकते हैं। उदाहरण के लिए,

:%!grep ERROR 

पूरे बफर को केवल नियमित रूप से अभिव्यक्ति से मेल खाने वाली रेखाओं के साथ प्रतिस्थापित करेगा।

यह grep से अधिक के लिए उपयोगी है, उदाहरण के लिए आप :%!sort के साथ बफर में लाइनों को सॉर्ट कर सकते हैं। या, आप ब्लॉक को चिह्नित करने के लिए V कमांड का उपयोग कर V कमांड का उपयोग करके टेक्स्ट की किसी भी श्रृंखला के लिए ऐसा कर सकते हैं और फिर :!filter-command (वर्तमान में चिह्नित ब्लॉक को इंगित करने के लिए vim स्वचालित रूप से '<,'> भर जाएगा)।

+0

+1 एक कमांड के लिए vim/रीडायरेक्टिंग को किसी अन्य फ़ाइल में छोड़ने की आवश्यकता नहीं है –

+0

शायद उदाहरणों में से सर्वश्रेष्ठ नहीं है, क्योंकि 'grep' और': sort' में विम में अंतर्निहित अर्थ हैं (जो कि अलग हैं ':! grep' और':! sort', बस भ्रमित होने के लिए)। – ephemient

1

negative lookahead का उपयोग करके काम किया।

+7

उदाहरण के बिना बहुत उपयोगी उत्तर नहीं: '% s/^ \ (\ ERROR \) \ @! $ \ N // g'। विम में '\ @!' ऋणात्मक लुकहेड सूचक है, न कि उस लिंक से '(?!)' प्रारूप। ': जी! 'उत्तर हालांकि आसान है। – atomicules

+0

मैं @atomicules से सहमत हूं, लेकिन फिर भी मैं अलेक्जेंडर के उत्तर को उखाड़ फेंक रहा हूं क्योंकि 'नकारात्मक लुकहेड' आगे वेबसार्चिंग के लिए एक उपयोगी शब्द है। –

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