एकल कमांड का उपयोग करके vi संपादक से 100 लाइनें हटाएं


33

मैं उबंटू का उपयोग कर रहा हूं और viसंपादक से सभी 100 लाइनों को हटाने की कोशिश कर रहा हूं, लेकिन मुझे एक कमांड में ऐसा करने का साक्षात्कार प्रश्न मिला।


एक VI समाधान नहीं है, लेकिन कमांड लाइन से: echo -n > <file>एक फ़ाइल से सभी लाइनों को हटाता है (वास्तव में "" के साथ फ़ाइल को ओवरराइट करता है)।
अज़

3
@ उसके लिए उपयोग करने की आवश्यकता नहीं echoहै; > $fileठीक काम करता है।
बजे एक CVn

4
viएक साक्षात्कार में सवाल पूछने वाली कंपनी किस तरह की है ?
बजे एक CVn

2
इस प्रश्न का उत्तर आसानी से vi के अल्पविकसित ज्ञान के साथ दिया जाता है। स्थापित vim के साथ एक कंप्यूटर पर (उबंटू पर मैं vim-gtkपैकेज की सिफारिश करूंगा , क्योंकि यह आपको vim भीतर xclipboard तक पहुंच देता है), मूल vimtutorपंक्ति का एक इंटरैक्टिव ट्यूटोरियल प्राप्त करने के लिए कमांड लाइन (vim के भीतर नहीं ) टाइप करें । इसे आधे घंटे से अधिक नहीं लेना चाहिए, और यह vi / vim का उपयोग करने के लिए सबसे अच्छा स्टार्टर गाइड है जिसे आप ढूंढने की संभावना रखते हैं।
evilsoup 14

1
@ माइकलकॉर्लिंग मैं एक साक्षात्कार में आने की कल्पना कर सकता हूं यदि आवेदक ने या तो पहले अनुभव के साथ vi(मौखिक रूप से या फिर से शुरू) का उल्लेख किया था या यदि प्रश्न के साथ पूर्वनिर्धारित किया गया था, "ठीक है, एक sysadmin के रूप में आपको कमांड लाइन संपादकों के बारे में कुछ पता होना चाहिए, सही vi" आपने उपयोग किया है ?"
वाइल्डकार्ड

जवाबों:


62

सामान्य मोड में, करते हैं

100dd

ddवर्तमान लाइन को हटाता है। उस कमांड को रखने 100से यह 100 बार दोहराने का कारण बनता है।

यदि वर्तमान लाइन से शुरू होने वाली फ़ाइल में 100 से कम लाइनें हैं, तो viकार्यान्वयन के आधार पर , यह या तो किसी भी को हटाने या हटाने में विफल होगा या जितने भी हैं। के मामले में vim, यह निर्भर करता है कि cpउर्फ compatibleविकल्प चालू है या नहीं।


गलत है कि यह केवल वर्तमान लाइन को हटा रहा है
मयूर मेहता

मैं एक समय में एक कमांड का उपयोग करके 100 लाइनें हटाना चाहता हूं
मयूर मेहता

13
100ddसही उत्तर है। मुझे आश्चर्य है कि आप क्या कर रहे हैं।
ott--

1
@mayurMehta को यह पता नहीं है कि कौन सी कंपनी इस तरह के सवाल पूछ रही है, और यह नहीं जानती कि वे जवाब के रूप में क्या उम्मीद कर रहे हैं। लेकिन किसी भी नौसिखिए VI उपयोगकर्ता को पता होगा कि 100dd सही उत्तर है।
मुनीम

1
@vgoff मुझे नहीं पता .. यदि वे आपके मूल विम कौशल का परीक्षण करने के लिए एक सामान्य समाधान की तलाश नहीं कर रहे हैं, तो यह साक्षात्कारकर्ताओं को स्टंप करने के लिए सिर्फ एक ट्रिक प्रश्न है। मैं कहूँगा 100dd जवाब है। यदि साक्षात्कारकर्ता पूछता है कि "क्या होता है यदि फ़ाइल में वर्तमान कर्सर से 100 से कम लाइनें हैं?", मैं जवाब देता हूं: "कमांड वर्तमान कर्सर से क्या हटा सकता है।" यह पूरी तरह से उचित है। जब तक साक्षात्कारकर्ता स्पष्ट नहीं करता, कर्सर पहली पंक्ति पर क्यों नहीं होगा? मुझे इन जैसे ट्रिक सवालों से नफरत है।
मुनीम

44
  1. वर्तमान वाली (सहित) से आगे 100 लाइनें हटाएं

    • दोहराएं dd (करेंट लाइन हटाएं) 100 बार:

      100dd
      
    • करंट लाइन से 99 लाइनों को आगे डिलीट करें

      d99j
      
  2. वर्तमान में से (सहित) पीछे से 100 लाइनें हटाएं

    d99k
    
  3. एक विशिष्ट श्रेणी में लाइन नंबर द्वारा लाइनों को हटाएं

    :1,100d
    
  4. वर्तमान लाइन के साथ शुरू होने वाली रेंज में लाइनों को हटाएं

    :.,.+99d
    

आदि आदि।


2
नंबर 4 करेंट लाइन (0) को 101 वीं (0 + 100) लाइनों तक डिलीट कर देगा, इसलिए पूछी गई 100 के बजाय 101 लाइन्स। कोशिश करें:.,+99d
ओलिवियर डुलैक

Drat, और मैं आंदोलन वाले सही हो गए! धन्यवाद।
बेकार

100dd ने मेरे लिए या तो काम नहीं किया - लेकिन # 4 ऊपर
सोलरी के

8

यदि फ़ाइल की सभी पंक्तियाँ हटाई जानी हैं, तो यह vi आदेश विलोपन की सीमा को निर्दिष्ट करता है:

:1,$d

1पहली लाइन को $दर्शाता है और अंतिम लाइन को दर्शाता है


या :%d (":" संदर्भ, ":% ..." के लिए शॉर्टकट है: ": 1, $ ...")
ओलिवियर दुलक

यह भी अच्छा है: d Gचाबियाँ और rarr; सभी सामग्री को वास्तविक [उदा। शीर्ष पंक्ति] से नीचे की रेखा तक
मारें

3

आप एक फ़ाइल में सभी लाइनों को हटाना चाहते हैं? के साथ फ़ाइल खोलें vi। पहली पंक्ति की शुरुआत में - जब आप फ़ाइल खोलते हैं तो कर्सर का डिफ़ॉल्ट स्थान - Escउसके बाद दबाएं dG

बस ध्यान दें, एक्शन dडिलीट को इंगित करता है, और Gफाइल की आखिरी लाइन को दर्शाता है। इसलिए, जब आप किसी भी लाइन को दबाते हैं dG, तो यह मौजूदा लाइन से शुरू होने वाली सभी लाइन को अंतिम एक तक हटा देता है।

यदि आप जानते हैं कि कौन सी लगातार लाइनों को हटाना है - तो कहिए, लाइन 101 से 200 तक - निम्नलिखित प्रमुख अनुक्रमों में टाइप करें Esc:101,200d:।


यदि आपने अभी फ़ाइल खोली है और फ़ाइल की शुरुआत में हैं तो आपको भागने की जरूरत नहीं है। आप सामान्य मोड में स्वचालित रूप से (डिफ़ॉल्ट रूप से) हैं।
vgoff

3

कोई फर्क नहीं पड़ता कि आप फ़ाइल में कहां हैं, आप कर सकते हैं ggdG

:%dकम महत्वपूर्ण प्रेस में बेहतर करना होगा। ठीक है, कुंजी shiftऔर enterकुंजियाँ गिनते हुए , वास्तव में ऊपर की तुलना में दो और प्रमुख प्रेस।

ऐसा कुछ करने से आप जहां हैं, वहां से 100ddकेवल 100 लाइनें ही डिलीट हो जाएंगी , और हो सकता है कि वह फ़ाइल से सभी लाइनों को हटा न दे, जो आपके कंप्यूटर लाइन की स्थिति पर निर्भर करता है।


0

Esc n dd। n वर्तमान लाइन से और हटाने के लिए लाइनों की संख्या है। "Esc" बटन दबाएं, फिर "n" और फिर "dd"। अपनी समझ को बेहतर करने के लिए


यहां भागने की क्या जरूरत है
प्रात_वायद

यह उत्तर स्वीकृत उत्तर के समान है।
Kusalananda

भागने के मामले में आप सम्मिलित मोड में हैं।
रिदा आबिद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.