कुछ अवसरों पर हमें किसी विशिष्ट पंक्ति को फ़ाइल या कई से हटाने की आवश्यकता होती है, उदाहरण के लिए, मेरे साथ ऐसा हुआ है कि मेरे पास फ़ाइलों की पूरी सूची है और मुझे इन सभी की लाइन # 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 टिप्पणियाँ, तुम्हारा छोड़ दो
बहुत अच्छा योगदान 😉
धन्यवाद
वैसे, अभी हमें आपका ईमेल मिला है, मैं आपको उत्तर दूंगा received
सादर
टर्मिनल, सर्वर और ssh कनेक्शन के उच्च पुजारी के रूप में, मैं आपके पास आता हूं, ओह महान KZKG ^ Gaara, और मैं आपसे पूछता हूं: मुझे अपने अज्ञान के स्तर पर एक ट्यूटोरियल कहां मिल सकता है जो मुझे साझा करने के लिए विभिन्न नेटवर्क में दो दूरस्थ मशीनों के साथ ssh कनेक्शन का उपयोग करने की अनुमति देता है। पाठ फ़ाइलें, पीडीएफ, छवि और ध्वनि (एमपी 3)…।
🙂
गंभीरता से, क्या आप मुझे इस संबंध में मार्गदर्शन कर सकते हैं, मेरे पास दो मशीनें हैं, एक काम पर और एक घर पर और मुझे उनके बीच एक ssh कनेक्शन की आवश्यकता है (क्योंकि जैसा कि मैं इसे समझता हूं, ssh सामग्री को मशीनों के बीच साझा करने की अनुमति देता है, क्या मैं सही हूं?)।
और अगर मैं गलत हूं, तो आप किस एप्लिकेशन की अनुशंसा करते हैं?
और मुझे इस संबंध में एक मूल ट्यूटोरियल कहां मिलेगा?
scp
scp user @ machine_address: पथ उपयोगकर्ता @ मशीन_ड्रेस: पथ।
सीपी, स्रोत -> गंतव्य के रूप में एक ही वाक्यविन्यास।
तुमने आदमी को दिखाया, तुम खो गए।
अच्छा सुझाव!
दिलचस्प टिप… xD
क्या आपको पता है कि बोल्ड टेक्स्ट को आउट करने के लिए क्या होता है?
मेरा मतलब है, मेरे पास एक txt फ़ाइल है जो एक शब्दकोश है, इसकी 10000 से अधिक लाइनें हैं और मैं चाहता हूं कि यह ":" निलंबन बिंदुओं से पहले कुछ पाठ को उजागर करे और इसे एक-एक करके करना बहुत अधिक है।
नमस्कार,
एक txt फ़ाइल सादा पाठ है, जैसा कि इसके नाम का अर्थ है ... सादा, बिना प्रारूप या समान कुछ भी, मुझे खेद है, लेकिन मुझे नहीं लगता कि आप जो पूछते हैं वह किया जा सकता है, क्या यह हो सकता है? 🙁
सादर
वास्तव में यह हो सकता है, लेकिन आपको गंतव्य प्रारूप जानना होगा।
पी.ई:
इको $ (प्रतिध्वनि "रॉबर्ट: हैलो। यहां बदलें" | sed 's / \ /।।
यह मुकाबला करने की बात है।
हटाने का दूसरा तरीका जो इस्तेमाल किया जा सकता है वह sed '/' $ 1 '/ d' है, लेकिन आपको फिर से सुनिश्चित होना होगा।
फिर इसे * .odt में सेव करके खत्म करें
लिब्रे ऑफिस के साथ ऐसा करने का कोई आसान तरीका नहीं है?
क्या आप एक लाइन का हिस्सा हटा सकते हैं और बाकी को छोड़ सकते हैं?
मान लीजिए कि मैं एक निश्चित पंक्ति में एक शब्द के सामने सब कुछ हटाना चाहता हूं।
या उस शब्द का अनुसरण करने वाली हर चीज़ को हटा दें।
हाँ, यह एक 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 / बदलें। * //'
धन्यवाद, यह मेरे लिए बहुत उपयोगी है।
अच्छा लेख, जिन्हें मैं पसंद करता हूं, SysAdmin कितने महान हैं!
हमारे जीवन को बिना sed, awek, perl, grep, tail, head, "Emacs" और इतने सारे अन्य आवश्यक उपकरणों के बिना क्या होगा?
धन्यवाद, यह बहुत मददगार था।
नमस्कार, और आप एक ही कमांड में एक फ़ाइल से 1,4 और 10 लाइनों को कैसे हटा सकते हैं?