मैं किसी टेक्स्ट फ़ाइल की सामग्री को कैसे कॉपी कर सकता हूं और उसे एक निश्चित लाइन पर शुरू करने के लिए पेस्ट कर सकता हूं?


13

मुझे एक पाठ फ़ाइल की सामग्री की प्रतिलिपि बनाने और इसे दूसरी पाठ फ़ाइल में पेस्ट करने की आवश्यकता है। पहली पाठ फ़ाइल में 10 पंक्तियाँ हैं और मुझे उन्हें पंक्ति संख्या 5 (उदाहरण के लिए) पर शुरू होने वाली दूसरी पाठ फ़ाइल में कॉपी करने की आवश्यकता है। तो दूसरे पाठ फ़ाइल में उन आंकड़ों को पंक्ति 5 से पंक्ति 14 तक लिखा जाना चाहिए। यह कैसे किया जा सकता है? अग्रिम में धन्यवाद। मुझे लिनक्स के बारे में एक धोखेबाज़ के रूप में देखें।

जवाबों:


10

headऔर tailसमाधान

स्रोत फ़ाइल को कहा जाता है ~/aऔर सम्मिलित की जाने वाली फ़ाइल को कहा जाता है ~/b। हम मर्ज की गई फ़ाइल को इसमें डाल देंगे ~/c:

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • पथ ~/आपकी /home/userनिर्देशिका नाम के लिए छोटा हाथ है
  • हेड फ़ाइल की पहली पांच पंक्तियों aको नई बनाई गई फ़ाइल में कॉपी करता हैc
  • बिल्ली फ़ाइल की सामग्री को सूचीबद्ध करती है bऔर इसे फ़ाइल में जोड़ देती हैc
  • फ़ाइल aके अंत तक लाइन 6 पर शुरू होने वाली फ़ाइल को जोड़ देती हैc

सत्यापन के बाद मर्ज की गई फ़ाइल का नाम बदलें

यह सत्यापित करने के बाद कि फाइल cफाइलों से सही तरीके से विलय हो गई है aऔर bहम उपयोग cकरने के लिए नाम बदल देंगे a:

mv ~/c ~/a
  • mvफ़ाइल cमें फ़ाइल ले जाता है a। डेटा को भौतिक रूप से स्थानांतरित नहीं किया गया है। फ़ाइल को केवल नाम दिया गया है जो समय बचाता है।

आपके उत्तर के लिए धन्यवाद। यह ठीक काम किया। हालाँकि, तीसरी टेक्स्ट फ़ाइल का उपयोग किए बिना ऐसा करने का एक और तरीका है?
जी। पसचलिस

जब किया जाता है तो तीसरी फ़ाइल को स्रोत फ़ाइल में बदला जा सकता है। मैंने सबसे पहले फ़ाइल को देखने में सक्षम होना बेहतर समझा। मैं अब उत्तर के लिए अतिरिक्त कदम जोड़ूंगा।
विनयुनुच्स 2 यूनिक्स

या ...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@ जोजो एक अच्छी एक पंक्ति सारांश है :) शिक्षण उद्देश्यों के लिए मैं एक पंक्ति प्रति कमांड विधि का उपयोग करना पसंद करता हूं और यदि कथन में निहित है। हालांकि कॉपी और टर्मिनल में चिपकाने के लिए मुझे एक लाइनर्स से प्यार है!
विनयुनुच्स

16

यहां सबसे आसान उपकरण हो सकता है sed। सम्मिलित करने के लिए b.txtमें a.txt5 वीं पंक्ति के बाद, आप लिख सकते हैं:

sed '5r b.txt' a.txt

sedफ़ाइल को a.txtलाइन के रूप में तर्क ( ) लाइन के रूप में निर्दिष्ट करता है । सभी लाइनें आउटपुट में पुन: उत्पन्न हो जाती हैं, जैसे कि वे इनपुट में दिखाई देते हैं, जब तक कि वे एक कमांड द्वारा बदल नहीं जाते हैं।

5एक पते (लाइन नंबर), जिस पर निम्न आदेश क्रियान्वित किया जाएगा है। हम जिस कमांड का उपयोग करते हैं r, वह एक फ़ाइल का नाम तर्क के रूप में लेता है (यहां b.txt), इसे पूरी तरह से पढ़ता है और वर्तमान लाइन के बाद आउटपुट में सम्मिलित करता है।

जैसा कि यह ऊपर खड़ा है, यह sedकमांड लाइन केवल आउटपुट को प्रिंट करेगा, बिना किसी फाइल को लिखे। आप या तो एक नई फ़ाइल (इनपुट फ़ाइल में से कोई भी नहीं!) को Bash के आउटपुट पुनर्निर्देशन का उपयोग करके पुनर्निर्देशित कर सकते हैं:

sed '5r b.txt' a.txt > c.txt

या आप बाहरी इनपुट फ़ाइल को सीधे 'एस (फॉर-इन-प्लेस') स्विच a.txtका उपयोग करके संशोधित कर सकते हैं । यदि आप इसे लिखते हैं , तो यह पहले प्रत्यय के साथ मूल इनपुट फ़ाइल की एक बैकअप प्रतिलिपि बना देगा :sed-i-i.bak.bak

sed -i '5r b.txt' a.txt

एक उदाहरण:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December

0

(@ByteCommander :) से सुरुचिपूर्ण उदाहरण का पुन: उपयोग

awk '1; NR==5 {system("cat b.txt")}' a.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.