2010-04-07 27 views
6

टेक्स्ट को हटाने का सबसे प्रभावी तरीका 2010-04-07 14: 25: 50,773 DEBUG यह एक डीबग लॉग स्टेटमेंट है - लॉग फ़ाइल से विम का उपयोग करके नीचे निकालने की तरह?विम का उपयोग करके मुख्य पाठ को बार-बार हटाने का सबसे प्रभावी तरीका क्या है?

 
9,8 
1,11 
5,2 
8,4 

ध्यान दें कि इस अवसर मैं विंडोज पर जाँचने उपयोग कर रहा हूँ पर, इसलिए किसी भी यूनिक्स प्रोग्राम जो बेहतर अनुकूल हो सकते हैं सुझाव है कि नहीं करते कृपया:

 
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 9,8 
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 1,11 
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 5,2 
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 8,4 

यह परिणाम दिखाई देते हैं यह चाहिए कार्य के लिए — मुझे विम का उपयोग करके इसे करना है।

उत्तर

13

भागो आदेश: :%s/.* - //

संपादित करें, स्पष्टीकरण:

%: whole file 
s: subsitute 
.* - : find any text followed by a space a dash and a space. 
// : replace it with the empty string. 
1

शायद सबसे आसान तरीका मैक्रो का उपयोग करेगा। a रजिस्टर में रिकॉर्डिंग शुरू करने के लिए qa दबाएं। फिर वर्णों को विम में जिस तरह से उपयोग किया जाता है उसे हटा दें। रिकॉर्डिंग को रोकने के लिए q दबाएं। फिर, लाइनों की मात्रा लें और @a संलग्न करें, उदाहरण के लिए 4 के लिए, [email protected] दबाएं। यह 4 बार मैक्रो दोहराएगा।

2

मेरे समाधान होगा:

qa     [start recording in record buffer a] 
^ (possibly twice) [get to the beginning of the line] 
d3f-    [delete everything till - including] 
<del>    [delete the remaining space] 
<down>    [move to next line] 
q     [end recording] 
<at>a    [execute recorded command] 

तो बस <at> पकड़ जब तक आप कर चुके हैं और स्वत: कुंजी दोहराने करते हैं आपके लिए काम

नोट:
इवेंटहो रिकॉर्ड किए गए मैक्रोज़ हमेशा नौकरी के लिए सबसे तेज़ और सबसे सही उपकरण नहीं हो सकते हैं, जो कुछ बेहतर देखने के लिए मैक्रो को रिकॉर्ड करना और निष्पादित करना अक्सर आसान होता है।

+0

यह 'd3f-' होना चाहिए क्योंकि * अंतिम * (3) डैश तक सबकुछ हटा दिया जाना चाहिए। वैसे भी, बहुत अच्छा समाधान। :-) –

+0

धन्यवाद, किसी भी तरह तिथि में डैश चूक गए। पोस्ट सही – dbemerlin

0

आप कर सकते हैं:

1,$s/.*- // 
  • 1: पंक्ति 1
  • $: अंतिम पंक्ति
  • s: प्रतिस्थापन
  • .*: कुछ भी

इसलिए यह प्रत्येक पंक्ति पर कुछ भी नहीं है जिसके बाद हाइफ़न और अंतरिक्ष कुछ भी नहीं है।

+0

मैं 'जी' छोड़ दूंगा क्योंकि आप केवल प्रत्येक पंक्ति पर एक बार प्रतिस्थापन करना चाहते हैं। –

+0

@ जुज: आप सही हैं। धन्यवाद :) – codaddict

6

तुम भी सभी पात्रों आप हटाना चाहते हैं का चयन करने के दृश्य ब्लॉक मोड इस्तेमाल कर सकते हैं:

gg  Go to the beginning of the file 
Ctrl-v Enter visual block mode 
G   Go to the end of the file 
f-  Go to dash 
<right> Go one more to the right 
d   Delete the selected block 
+0

दृश्य ब्लॉक मोड में प्रवेश करने के लिए Shift + V नहीं होना चाहिए? इसके अलावा, इसे तीसरे डैश से मेल खाना चाहिए, क्योंकि टाइमस्टैम्प में दो डैश होते हैं। –

+0

शिफ्ट-वी दृश्य रेखा मोड के लिए है। Ctrl-v वास्तव में दृश्य ब्लॉक मोड है। –

+0

'Shift + v' (जो' V' है) दृश्य रेखा मोड में प्रवेश करने के लिए उपयोग किया जाता है। – wRAR

0

:%s/.\{-}\ze\d\+,\d\+$//

कि अल्पविराम के प्रस्तोता द्वारा काम करता है आदेश पंक्ति के अंत में अलग की गई संख्याएं, इसलिए यह सबकुछ काम करता है, भले ही स्ट्रिंग में उन संख्याओं को बदल दें।

दृश्य ब्लॉक तरीका शायद सबसे आसान समाधान है और जिसे मैं उपयोग करता हूं।

2010-04-07 14:25:50,772 DEBUG This is a debug log statement | 9,8

:

 
2010-04-07 14:25:50,772 DEBUG This is a debug log statement - 9,8 
2010-04-07 14:25:50,772 DEBUG This is another debug log statement - 9,8 

delimeter भी एक अलग चरित्र को बदल सकता है तो एक लाइन तो ऐसा दिखाई देगा: लेकिन, यह अगर लाइनों के रूप में में, कंपित बनने वाले थे काम नहीं करता है

फिर :%s/.* - // का उपयोग नहीं करेगा। regex के लिए

स्पष्टीकरण:

.\{-} मैचों जो कुछ भी, नई-पंक्तियों, संभव

\ze मिलान बंद हो जाता है के रूप में कुछ के रूप में है, इसलिए की जगह निम्न वर्णों

\d\+,\d\+$ अंक को प्रभावित नहीं करता, पर छोड़कर कम से कम एक, अल्पविराम के बाद, अंकों के बाद, कम से कम एक, और लाइन

स्वाभाविक रूप से यह काम नहीं करता है अगर वांछित वीए का प्रारूप रेखा के अंत में लूज अनियमित है, इस मामले में अन्य समाधान काम करते हैं यदि मानों की रेखाएं समान लंबाई के हैं या डेलीमीटर समान हैं।

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

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