विम में दूसरा कॉलम कैसे हटाएं?


12

मेरे पास एक टैब-सीमांकित फ़ाइल है:

name1   verb1   name2   verb2   etc...

मैं दूसरा कॉलम हटाना चाहता हूं। मैंने इनमें से एक उत्तर को संपादित करने की कोशिश की , लेकिन मैं परिचित नहीं था sedऔर awk, मैं नहीं कर सकता था।

क्या कोई मेरी मदद कर सकता है?


टैब को इंगित करने के लिए @KasiyA ओपी का मूल इस्तेमाल \ t है।
स्टीलड्राइवर

@steeldriver ओके आप सही कह रहे हैं। मुझे लगा कि यह लाइन का हिस्सा है। हटा दिया। लेकिन मैं सही करने के लिए के अनुसार संपादित पहली पोस्ट धन्यवाद
αғsнιη

1
vim विज़ुअल-ब्लॉक मोड समस्या का समाधान नहीं करता है? (सामान्य मोड में ctrl-v, xहटाने के लिए कॉलम का चयन करें )?
रमनो

@Rmano यह धन्यवाद में मदद करता है, लेकिन क्या आप मुझे बता सकते हैं कि विज़ुअल मोड में फ़ाइल के अंत में कैसे जाएं? (मैं ctrl G की कोशिश की, लेकिन यह काम नहीं करता है)।
TeaLeef

जवाबों:


10

विम में, आपको कमांड का उपयोग करने में सक्षम होना चाहिए

:%s/\t[^\t]*//

( TABकिसी भी चरित्र के शून्य या अधिक घटनाओं के बाद विकल्प को छोड़कर TABकुछ भी नहीं)। यदि आपकी फ़ाइल में केवल दो कॉलम हैं, तो आप थोड़ा सरल उपयोग कर सकते हैं :%s/\t.*या :%s/\t.*$जो पंक्ति के अंत तक पहले TABऔर किसी भी निम्नलिखित वर्ण को बदल सकते हैं ।


22

स्वीकृत उत्तर इसके मुकाबले बहुत अधिक सुरुचिपूर्ण है (मैंने इसे अपडाउन किया है!) लेकिन अगर आपको यह याद नहीं है कि आप सीधे vim विजुअल ब्लॉक मोड का उपयोग कर सकते हैं । स्तंभ के पहले कोने में विम और गो (सामान्य मोड) खोलें, जैसे:

यहाँ छवि विवरण दर्ज करें

टाइप करें CTRL-Vऔर आप कॉलम को चुनने के लिए कर्सर ले जा सकते हैं, यह मध्य मार्ग है:

यहाँ छवि विवरण दर्ज करें

अंत में जाने के लिए, दबाएँ G:

यहाँ छवि विवरण दर्ज करें

ब्लॉक टूटा हुआ लगता है क्योंकि हम अंतिम पंक्ति पर हैं जो रिक्त है; बस kफिर से देखने के लिए एक पंक्ति (ऊपर तीर या ) के साथ ऊपर जाएं ...:

यहाँ छवि विवरण दर्ज करें

अब आप xब्लॉक को हटाने के लिए बस दबाएँ :

यहाँ छवि विवरण दर्ज करें


6

मैं का प्रयोग करेंगे cutइस के लिए

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

आप इसे फ़िल्टर के रूप में विम के भीतर भी उपयोग कर सकते हैं, (यह फ़ाइल में सभी पंक्तियों को बदल देगा; आप प्रक्रिया लाइनों के 2,9बजाय %2-9 का उपयोग भी कर सकते हैं (उदाहरण के लिए) , या उन लाइनों का चयन करें जिन्हें आप चाहते हैं V):

:%!cut -f1,3-

-f1,3-का अर्थ है 'प्रिंट फ़ील्ड एक, फ़ील्ड तीन और उसके बाद पंक्ति के अंत तक सभी फ़ील्ड'। डिफ़ॉल्ट रूप से, cutइसके परिसीमन के रूप में एक टैब का उपयोग करता है; यदि आपको कुछ और चाहिए, तो -dविकल्प का उपयोग करें (देखें man cut)।


4

आप या तो कोशिश कर सकते हैं:

:%norm WdW

या मैन्युअल रूप से दृश्य मोड का उपयोग कर:

  1. दूसरे कॉलम में कूदें (जैसे दबाकर:) W
  2. द्वारा दृश्य-ब्लॉक प्रारंभ करें Ctrl+v
  3. (दबाकर जैसे: दूसरे स्तंभ का चयन करें W, G)।
  4. इसे दबाकर हटा दें d

कमांड लाइन से इसे इन-प्लेस करने के लिए, प्रयास करें:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

संबंधित: गति के लिए उपयोग करने के लिए टैब कुंजी के लिए शाब्दिक कैसे लिखें?

यह सभी देखें:


हां, +1, लेकिन सावधान रहें कि यदि आपके पास अंतिम चरण 3 पर खाली लाइनें हैं) तो जा सकते हैं ...
Rmano
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.