Sed का उपयोग करके किसी फ़ाइल से विशिष्ट लाइनों को कैसे हटाएं

कुछ अवसरों पर हमें किसी विशिष्ट पंक्ति को फ़ाइल या कई से हटाने की आवश्यकता होती है, उदाहरण के लिए, मेरे साथ ऐसा हुआ है कि मेरे पास फ़ाइलों की पूरी सूची है और मुझे इन सभी की लाइन # 27 को हटाने की आवश्यकता है (लाइन # 27 एक एसीएल की है) , मानदंड, नियम, कॉन्फ़िगरेशन), या तो मैं फ़ाइल को फ़ाइल द्वारा संपादित कर सकता हूं या मैं कमांड का उपयोग करने के लिए केवल वही प्राप्त कर सकता हूं जो मुझे चाहिए प्यास और एक बैश स्क्रिप्ट (वैकल्पिक)।

लेकिन, आइए कुछ फ़ाइल को कुछ सरल करने का प्रयास करें।

हमारे पास फाइल है डिस्ट्रोस-deb.txt जिसमें यह शामिल है:

डेबियन

Kubuntu

archlinux

एकांत

टकसाल

दूसरे शब्दों में, फ़ाइल डिस्ट्रोस-deb.txt वह है जिसमें हम डेबियन आधारित डिस्ट्रोस डालेंगे, लेकिन वहां हम देखते हैं कि लाइन # 3 में "आर्च्लिनक्स" है, एक डिस्ट्रो जिसका जाहिर तौर पर डेबियन से कोई लेना-देना नहीं है, इसलिए हमें उस लाइन को खत्म करना होगा। उस फ़ाइल की लाइन # 3 को खत्म करने के लिए हम निम्नलिखित डालेंगे:

sed "3d" distros-deb.txt > distros-deb-ok.txt

इस लाइन की व्याख्या करना कुछ आसान है, साथ में प्यासा "3 डी" हम संकेत दे रहे हैं कि हम लाइन # 3 को हटा देंगे डिस्ट्रोस-deb.txt हम इंगित करते हैं कि किस फ़ाइल पर काम करना है, अर्थात, इस फ़ाइल की लाइन # 3 को हटाएं, यहाँ तक कि अगर हम एंटर दबाते हैं तो यह हमें दिखाएगा कि हम क्या चाहते हैं लेकिन टर्मिनल में, इसलिए > distros-deb-ok.txt हम संकेत कर रहे हैं कि टर्मिनल में परिणाम दिखाने के बजाय, इसने इसे इस नाम की फ़ाइल में डाल दिया है।

क्या सरल है?

साथ ही, हम इसके इस्तेमाल से बच सकते हैं > distros-deb-ok.txt के एक उचित पैरामीटर का उपयोग कर प्यासपैरामीटर -i

यही है, अगर हम फ़ाइल से लाइन हटाना चाहते हैं और इसे उसी नाम (और किसी अन्य फ़ाइल में नहीं) के साथ सहेजना चाहते हैं, तो बस पैरामीटर जोड़ें -i :

sed -i "3d" distros-deb.txt

यह लाइन # 3 को डिस्ट्रोस-डिबेट से हटा देगा और इसे सेव कर देगा।

क्या होगा यदि मुझे लाइनों की एक सीमा चाहिए, जो कि लाइन # 3 को हटाना है, लेकिन # 4 और # 5 भी है? इसे प्राप्त करने के लिए हमने 3 से 5 तक की सीमा तय की, जो है:

sed -i "3,5d" distros-deb.txt

और यह मुझे केवल डेबियन और कुबंटू only दिखाएगा

तो क्या होगा अगर मैं लाइन 2 से आखिरी एक तक हटाना चाहता हूं, जब मुझे कुल लाइनें नहीं पता हैं?

बस डॉलर के प्रतीक का उपयोग करें - »$

sed -i "2,$d" distros-deb.txt

यदि आप पहली पंक्ति से # 4 तक समाप्त करना चाहते हैं, तो हम शुरुआत में 1 मान देते हैं:

sed -i "1,4d" distros-deb.txt

यह सब कुछ रहा है, एक बहुत ही उपयोगी टिप जब आप कार्यों को स्वचालित करने के लिए बैश स्क्रिप्ट बनाना चाहते हैं और आपको कॉन्फ़िगरेशन फ़ाइलों की लाइनों को संशोधित करने और समाप्त करने की आवश्यकता है, जिसे संशोधित करने के लिए हम उपयोग कर सकते हैं प्यास o पर्ल, साथ ही खत्म करने के लिए हम पहले से ही जानते हैं कि इसे as sed के साथ कैसे करना है

सादर


16 टिप्पणियाँ, तुम्हारा छोड़ दो

अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   मिसे-देवल कहा

    बहुत अच्छा योगदान 😉

    1.    KZKG ^ गारा कहा

      धन्यवाद

      वैसे, अभी हमें आपका ईमेल मिला है, मैं आपको उत्तर दूंगा received

      सादर

  2.   बेनाम कहा

    टर्मिनल, सर्वर और ssh कनेक्शन के उच्च पुजारी के रूप में, मैं आपके पास आता हूं, ओह महान KZKG ^ Gaara, और मैं आपसे पूछता हूं: मुझे अपने अज्ञान के स्तर पर एक ट्यूटोरियल कहां मिल सकता है जो मुझे साझा करने के लिए विभिन्न नेटवर्क में दो दूरस्थ मशीनों के साथ ssh कनेक्शन का उपयोग करने की अनुमति देता है। पाठ फ़ाइलें, पीडीएफ, छवि और ध्वनि (एमपी 3)…।

    🙂

    गंभीरता से, क्या आप मुझे इस संबंध में मार्गदर्शन कर सकते हैं, मेरे पास दो मशीनें हैं, एक काम पर और एक घर पर और मुझे उनके बीच एक ssh कनेक्शन की आवश्यकता है (क्योंकि जैसा कि मैं इसे समझता हूं, ssh सामग्री को मशीनों के बीच साझा करने की अनुमति देता है, क्या मैं सही हूं?)।
    और अगर मैं गलत हूं, तो आप किस एप्लिकेशन की अनुशंसा करते हैं?
    और मुझे इस संबंध में एक मूल ट्यूटोरियल कहां मिलेगा?

    1.    -स्पीकर- कहा

      scp

      scp user @ machine_address: पथ उपयोगकर्ता @ मशीन_ड्रेस: ​​पथ।

      सीपी, स्रोत -> गंतव्य के रूप में एक ही वाक्यविन्यास।

  3.   f3niX कहा

    तुमने आदमी को दिखाया, तुम खो गए।

  4.   जोकिन कहा

    अच्छा सुझाव!

  5.   लाइकसहैकर इमो कहा

    दिलचस्प टिप… xD

    क्या आपको पता है कि बोल्ड टेक्स्ट को आउट करने के लिए क्या होता है?
    मेरा मतलब है, मेरे पास एक txt फ़ाइल है जो एक शब्दकोश है, इसकी 10000 से अधिक लाइनें हैं और मैं चाहता हूं कि यह ":" निलंबन बिंदुओं से पहले कुछ पाठ को उजागर करे और इसे एक-एक करके करना बहुत अधिक है।

    1.    KZKG ^ गारा कहा

      नमस्कार,

      एक txt फ़ाइल सादा पाठ है, जैसा कि इसके नाम का अर्थ है ... सादा, बिना प्रारूप या समान कुछ भी, मुझे खेद है, लेकिन मुझे नहीं लगता कि आप जो पूछते हैं वह किया जा सकता है, क्या यह हो सकता है? 🙁

      सादर

      1.    aca कहा

        वास्तव में यह हो सकता है, लेकिन आपको गंतव्य प्रारूप जानना होगा।
        पी.ई:
        इको $ (प्रतिध्वनि "रॉबर्ट: हैलो। यहां बदलें" | sed 's / \ /।।
        यह मुकाबला करने की बात है।
        हटाने का दूसरा तरीका जो इस्तेमाल किया जा सकता है वह sed '/' $ 1 '/ d' है, लेकिन आपको फिर से सुनिश्चित होना होगा।

        1.    लाइकसहैकर इमो कहा

          फिर इसे * .odt में सेव करके खत्म करें

          लिब्रे ऑफिस के साथ ऐसा करने का कोई आसान तरीका नहीं है?

  6.   लोलो कहा

    क्या आप एक लाइन का हिस्सा हटा सकते हैं और बाकी को छोड़ सकते हैं?

    मान लीजिए कि मैं एक निश्चित पंक्ति में एक शब्द के सामने सब कुछ हटाना चाहता हूं।

    या उस शब्द का अनुसरण करने वाली हर चीज़ को हटा दें।

    1.    aca कहा

      हाँ, यह एक regex खींचने की बात है (यदि आवश्यक आदमी sed -r, -regexp- विस्तारित)
      जो मुझे मिल रहा है उससे शुरू
      गूंज «रॉबर्ट: हैलो। यहाँ बदलें »| sed 's / बदलें //'
      एक अच्छी तरह से परिभाषित पैटर्न के साथ और साथ। (एक चरित्र) और * (एक से अधिक)
      तो:
      गूंज «रॉबर्ट: हैलो। यहाँ बदलें »| sed 's / बदलें। * //'
      इससे पहले:
      गूंज «रॉबर्ट: हैलो। यहाँ बदलें »| sed 's /। * बदलें //'
      यदि यह मायने रखता है कि शब्द प्रकट होता है
      गूंज «रॉबर्ट: हैलो। यहाँ बदलें »| sed 's / बदलें। * / बदलें /'
      या अधिक विस्तृत
      रॉबर्ट युक्त लाइन में चेंज के बाद क्या होता है
      इको-ई «फ्रिट्ज़: हैलो। यहाँ बदलें \ n टिप्पणी: नमस्कार। यहाँ बदलें »| sed '/Robert/s/Cambio.*//'
      या शुरुआत में दूसरी पंक्ति की तरह और बाकी की प्रक्रिया करें
      इको-ई «फ्रिट्ज़: हैलो। यहाँ बदलें \ n टिप्पणी: नमस्कार। यहां बदलें \ n » sed -e 2d -e's s / Change। * // '
      इको-ई «फ्रिट्ज़: हैलो। यहाँ बदलें \ n टिप्पणी: नमस्कार। यहां बदलें \ n » sed '2d; s / बदलें। * //'

      1.    लोलो कहा

        धन्यवाद, यह मेरे लिए बहुत उपयोगी है।

  7.   MSX कहा

    अच्छा लेख, जिन्हें मैं पसंद करता हूं, SysAdmin कितने महान हैं!
    हमारे जीवन को बिना sed, awek, perl, grep, tail, head, "Emacs" और इतने सारे अन्य आवश्यक उपकरणों के बिना क्या होगा?

  8.   लिस्बेथ ओलेरवेस कहा

    धन्यवाद, यह बहुत मददगार था।

  9.   पर्णनी कहा

    नमस्कार, और आप एक ही कमांड में एक फ़ाइल से 1,4 और 10 लाइनों को कैसे हटा सकते हैं?