2013-07-17 11 views
56

लिनक्स में फ़ाइल में टेक्स्ट जोड़ने का सबसे आसान तरीका क्या है?मैं फ़ाइल में टेक्स्ट कैसे जोड़ूं?

मुझे at this question देखा गया था, लेकिन स्वीकृत उत्तर एक अतिरिक्त प्रोग्राम (sed) का उपयोग करता है, मुझे यकीन है कि echo या इसी तरह के साथ एक आसान तरीका होना चाहिए।

उत्तर

75
cat >> filename 
This is text, perhaps pasted in from some other source. 
Or else entered at the keyboard, doesn't matter. 
^D 

अनिवार्य रूप से, आप किसी भी पाठ फ़ाइल में आप चाहते हैं डंप कर सकते हैं। CTRL-D एक अंत-फ़ाइल फ़ाइल सिग्नल भेजता है, जो इनपुट को समाप्त करता है और आपको खोल में लौटाता है।

+0

@ जोनकिपरस्की: मुझे खेद है, मैंने नहीं देखा कि यह आपके उत्तर में लिखा गया था ... –

+1

फ़ाइल को रूट अनुमति की आवश्यकता होने पर मैं यह कैसे कर सकता हूं? – UselesssCat

100

कैसे के बारे में:

echo "hello" >> <filename> 

>> ऑपरेटर का उपयोग करना, फ़ाइल के अंत में डेटा संलग्न करते हुए > का उपयोग कर पहले से ही विद्यमान है, तो फ़ाइल की सामग्री के ऊपर लिख देगा होगा।

तुम भी उसी तरह से printf इस्तेमाल कर सकते हैं:

printf "hello" >> <filename> 

ध्यान दें कि यह ऊपर का इस्तेमाल करना खतरनाक हो सकता है। उदाहरण के लिए यदि आपके पास पहले से एक फ़ाइल है और आपको फ़ाइल के अंत में डेटा जोड़ने की आवश्यकता है और आप फ़ाइल में सभी डेटा को अंतिम > जोड़ना भूल जाएंगे। आप अपने .bashrc में noclobber चर सेट करके इस व्यवहार को बदलने कर सकते हैं:

set -o noclobber 

अब जब आप आप एक चेतावनी cannot overwrite existing file कह मिल जाएगा echo "hello" > file.txt करने की कोशिश।

फाइल करने के लिए लेखन के लिए मजबूर करने के लिए आप अब विशेष सिंटैक्स का उपयोग करना होगा:

echo "hello" >| <filename> 

तुम भी पता होना चाहिए कि डिफ़ॉल्ट रूप से echo एक अनुगामी नई लाइन चरित्र जो -n ध्वज का उपयोग द्वारा दबा दिया जा सकता है कहते हैं:

echo -n "hello" >> <filename> 

संदर्भ

+2

आम तौर पर, मुझे 'बिल्ली' का उपयोग करने वाले स्वीकृत उत्तर से अधिक पसंद है, लेकिन आप '>' के बजाय '>>' का उपयोग सुनिश्चित करने के लिए सावधान रहेंगे! – sixty4bit

+0

@ sixty4bit - पूरी तरह से सहमत हैं, लेकिन मुझे लगता है कि आपको हमेशा पता होना चाहिए कि आप शैल के साथ काम करते समय क्या कर रहे हैं या नहीं तो आप कुछ ऐसा कर सकते हैं जैसे 'sudo rm -r/'=) – Cyclonecode

+0

बेहतर' sudo rm -r/' 'सुडो आरएम-आरएफ /'!^_^क्या कोई झंडा है जो मौजूदा फाइल की सामग्री को ओवरराइट करने से पहले पुष्टिकरण के लिए पूछेगा '''? इस तरह के झंडे का हमेशा उपयोग करने के लिए एलिसिंग ऐसा लगता है कि यह एक अच्छा विचार होगा। – sixty4bit

14

अन्य संभावित तरीका है:

echo "text" | tee -a filename 

-एक फ़ाइल के अंत में संलग्न कर देगा।

7

स्वीकृत उत्तर का पालन करें।

आपको CTRL-D to designate the end if using this in a script के अलावा कुछ और चाहिए। इसके बजाय इसे आजमाएं:

cat <<EOF>> filename 
This is text entered via the keyboard or via a script. 
EOF 

यह निर्दिष्ट फ़ाइल ("ईओएफ" सहित) में टेक्स्ट संलग्न करेगा।

यह here document (or heredoc) का उपयोग करता है।

हालांकि अगर आपको बताई गई फ़ाइल में शामिल होने के लिए सुडो की आवश्यकता है, तो यदि आप सीधे कमांड लाइन पर टाइप कर रहे हैं तो I/O पुनर्निर्देशन के कारण हेड्रोक का उपयोग करने में परेशानी होगी।

यह भिन्नता काम करेंगे जब आप कमांड लाइन पर सीधे टाइप कर रहे:

sudo sh -c 'cat <<EOF>> filename 
This is text entered via the keyboard. 
EOF' 

या आप tee बजाय का उपयोग कमांड लाइन sudo जब बिल्ली के साथ हियरडॉक का उपयोग कर देखा मुद्दे से बचने के लिए कर सकते हैं:

tee -a filename << EOF 
This is text entered via the keyboard or via a script. 
EOF 
संबंधित मुद्दे