टेक्स्ट फ़ाइल के अंत में आउटपुट कैसे जोड़ें


478

मैं एक टेक्स्ट फ़ाइल के अंत में एक कमांड के आउटपुट को कैसे जोड़ सकता हूं?

जवाबों:


665

फ़ाइल में आउटपुट निर्देशित करते समय >>इसके बजाय का उपयोग करें >:

your_command >> file_to_append_to

अगर file_to_append_to मौजूद नहीं है, तो इसे बनाया जाएगा।

उदाहरण:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
समस्या यह है कि echoस्ट्रिंग से newlines निकालता है। आप एक फ़ाइल को कैसे जोड़ सकते हैं जिसमें एक स्ट्रिंग है जिसमें नई सुर्खियाँ हैं?
टिमोथी स्वान

5
@TimothySwan, मैं -e विकल्प के साथ विश्वास करता हूं।
वैलेंटाइन ग्रेजायर

इको स्ट्रिंग से नईलाइन्स नहीं निकालता है। यदि आप तर्क को ठीक से उद्धृत करने में विफल रहते हैं, तो शेल स्ट्रिंग को विभाजित करेगा और प्रतिध्वनियों को पारित कर देगा और प्रतिध्वनि कभी भी नए सिरे से नहीं देखेगा।
विलियम पर्ससेल

105

appendएक फ़ाइल का उपयोग करने के लिए >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

फिर आउटपुट होना चाहिए

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

overwriteएक फ़ाइल का उपयोग करने के लिए >

echo "hello tom" > read.txt
cat read.txt  

तो बाहर डाल है

hello tom


74

आप >> ऑपरेटर का उपयोग कर सकते हैं। यह कमांड से टेक्स्ट फाइल के अंत में डेटा को जोड़ देगा।

इस प्रयास को चलाने के लिए परीक्षण करें:

echo "Hi this is a test" >> textfile.txt

ऐसा एक दो बार करें और फिर चलाएं:

cat textfile.txt

आप देखेंगे कि आपके पाठ को textfile.txt फ़ाइल में कई बार जोड़ा गया है।


40

command >> file_to_append_toकिसी फ़ाइल में संलग्न करने के लिए उपयोग करें ।

उदाहरण के लिए echo "Hello" >> testFile.txt

चेतावनी: यदि आप केवल एक का उपयोग करते हैं तो आप >फ़ाइल की सामग्री को अधिलेखित कर देंगे। यह सुनिश्चित करने के लिए कि ऐसा कभी नहीं होता है, आप set -o noclobberअपने साथ जोड़ सकते हैं .bashrc

यह सुनिश्चित करता है कि यदि आप गलती से टाइप करते हैं command > file_to_append_to से किसी मौजूदा फ़ाइल में करते हैं, तो यह आपको सूचित करेगा कि फ़ाइल पहले से मौजूद है। नमूना त्रुटि संदेश:file exists: testFile.txt

इस प्रकार, जब आप इसका उपयोग करते हैं तो >यह आपको केवल एक नई फ़ाइल बनाने की अनुमति देगा, न कि किसी मौजूदा फ़ाइल को ओवरराइट करने की।



21

विकल्प -a (--append) के साथ टी का उपयोग करने से आप एक ही बार में कई फ़ाइलों को जोड़ सकते हैं और sudo का उपयोग भी कर सकते हैं (बहुत ही उपयोगी जब संरक्षित फ़ाइलों के लिए संलग्न है )। इसके अलावा, यह दिलचस्प है यदि आपको बैश के अलावा अन्य गोले का उपयोग करने की आवश्यकता है, क्योंकि सभी गोले> और >> ऑपरेटरों का समर्थन नहीं करते हैं

echo "hello world" | sudo tee -a output.txt

इस धागे के टी के बारे में अच्छे उत्तर हैं


2
किसी नई लाइन के साथ किसी चीज़ को जोड़ने का यह सबसे अच्छा तरीका है।
M_R_K

2
संरक्षित फ़ाइलों के लिए
अपील

14

पूरे प्रश्न के लिए:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

यह 720 लाइनों (30 * 24) को o.txt में जोड़ेगा और उसके बाद वर्तमान तिथि के आधार पर फ़ाइल का नाम बदलेगा।

हर घंटे क्रोन के साथ ऊपर चलाएं, या

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

11

मैं इको के बजाय प्रिंटफ का उपयोग करूंगा क्योंकि यह अधिक विश्वसनीय है और नई लाइन जैसी प्रक्रियाओं को \nठीक से प्रारूपित करता है।

यह उदाहरण पिछले उदाहरणों में प्रतिध्वनि के समान आउटपुट उत्पन्न करता है:

printf "hello world"  >> read.txt   
cat read.txt
hello world

हालाँकि अगर आप इस उदाहरण में इको के साथ प्रिंटफ़ को प्रतिस्थापित करने वाले थे, तो इको एक स्ट्रिंग के रूप में व्यवहार करेगा, इस प्रकार इरादे को अनदेखा कर सकता है

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

7

मैं आपको दो चीजें करने का सुझाव दूंगा:

  1. >>सामग्री को विशेष रूप से फ़ाइल में जोड़ने के लिए अपनी शेल स्क्रिप्ट में उपयोग करें । फ़ाइल नाम तय किया जा सकता है या कुछ पैटर्न का उपयोग कर सकता है।
  2. शेल स्क्रिप्ट को ट्रिगर करने के लिए प्रति घंटा क्रोनजॉब सेट करें

7

उदाहरण के लिए आपकी फ़ाइल में निम्न शामिल हैं:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

अगर आप फ़ाइल के अंत में संलग्न करना चाहते हैं तो ----> 'पाठ' के बीच रिक्त स्थान याद रखें >> 'फ़ाइल का नाम'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

और फ़ाइल की सामग्री को अधिलेखित करने के लिए:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

1
यह कई विवरणों में भ्रामक है। रिक्त स्थान महत्वपूर्ण नहीं हैं और एक खाली आउटपुट को पाइप करना catहै ... बस पूरी तरह से निराला है। (यह खाली है क्योंकि आप एक फ़ाइल में मानक आउटपुट को पुनर्निर्देशित करते हैं।)
ट्रिपल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.