2009-11-12 13 views
22

मुझे उन सभी पंक्तियों को हटाने के लिए नियमित अभिव्यक्ति को समझने की आवश्यकता है जो "+" या "-" से शुरू नहीं होते हैं।मैं उन सभी पंक्तियों को कैसे हटा सकता हूं जो कुछ वर्णों से शुरू नहीं होते हैं?

मैं एक बड़ी diff फ़ाइल की एक पेपर प्रति मुद्रित करना चाहता हूं, लेकिन यह वास्तविक diff से पहले और बाद में 5 या तो रेखाएं दिखाता है।

+1

आप क्यों नहीं बस अंतर को पुनर्जीवित नहीं कर सकता और यह बताने के संदर्भ लाइनों की # कम करने के लिए? –

+1

जो मैंने अभी सुझाव दिया है, कमांड 'diff -c 0 -u 0' –

उत्तर

46

वीआईएम में:

:g!/^[+-]/d

यहाँ अंग्रेजी अनुवाद है:

g lobally सभी लाइनों है कि नहीं ! मैच नियमित अभिव्यक्ति करने के लिए कुछ करना: लाइन ^ या तो + या - के बाद की शुरुआत है, और ऐसा करने के लिए है कि कुछ d हटाएं करने के लिए है उन पंक्तियों।

+0

बढ़िया, धन्यवाद! यह एक अच्छा फिक्स है। – mager

+4

यदि आप एक कीस्ट्रोक को सहेजना चाहते हैं: ': v' एक समानार्थी है ': g!' :) –

+0

जो दो कीस्ट्रोक बचाता है! शिफ्ट, 1. साफ। – Marcin

0

diff -u <some args here> | grep '^[+-]'

या फिर आप सब पर अतिरिक्त लाइनें उत्पादन नहीं कर सकता:

diff --unified=0 <some args>

0
cat your_diff_file | sed '/^[+-]/!D' 
+0

'cat' का बेकार उपयोग है:' sed' इस विशेष मामले के लिए सहमत –

+0

के रूप में फ़ाइल नाम स्वीकार करता है। डेटा को क्रमशः फ़िल्टर करने के लिए मैं आमतौर पर sed आदेशों की एक लंबी श्रृंखला का उपयोग करते समय बिल्ली का उपयोग करता हूं। यदि मेरे पास शुरू करने के लिए डेटा फ़ाइल बहुत बड़ी है, तो मैं बिल्ली -100 के साथ बिल्ली को प्रतिस्थापित करता हूं और शेष भाग वही रहता है। –

0
egrep "^[+-]" difffile >outputfile 
इसके बजाय सब कुछ है कि आप केवल लाइनों से मेल खाने वाले को दिखाने से मेल नहीं खाता हटाने के

http://txt2re.com/

यह भी कई अलग अलग भाषाओं के लिए कोड उदाहरण प्रदान करता है: :)

+1

आपको निश्चित रूप से एक और देखभाल की आवश्यकता है और "ई" या उद्धरण की आवश्यकता नहीं हो सकती है। यह मेरे लिए काम करता है: 'grep^[^ + -] ' –

0

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

+0

धन्यवाद !! यह कमाल का है!! – mager

0
%!grep -Ev '^[+-]' 

यह इनलाइन करता है वर्तमान फ़ाइल पर, और काफी :v तुलना में तेजी से बड़ी फ़ाइलों के लिए हो सकता है।

विम 7.4, उबंटू 14.04, 1 एम लाइन लॉग फ़ाइल पर परीक्षण किया गया।

लाइन्स कि शब्द शामिल नहीं है: https://superuser.com/questions/265085/vim-delete-all-lines-that-do-not-contain-a-certain-word/1187212#1187212

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