मैं किसी फ़ाइल में टेक्स्ट कैसे जोड़ सकता हूँ?


109

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

मुझे इस प्रश्न पर एक नज़र थी , लेकिन स्वीकृत जवाब एक अतिरिक्त कार्यक्रम ( sed) का उपयोग करता है, मुझे यकीन है कि इसके साथ echoया इसके समान आसान तरीका होना चाहिए ।

जवाबों:


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

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


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

2
@UselesssCat जब कुछ "अनुमति से वंचित" हो जाता है, तो मैं जो कुछ भी कमांड चला रहा हूं उसे फिर से जांचता हूं और फिर उपयोग sudo !!करता हूं - जो अंतिम कमांड को पहले से निष्पादित करता है sudo। मुझे हाल ही में पता चला कि यह भी साथ काम करता है nano(गलती से nano nano auth... की कोशिश करके )
सैंड्रा

अगर आपको sudo का उपयोग करने या स्क्रिप्ट में इसका उपयोग करने की आवश्यकता है, तो नीचे दिए गए इस स्वीकृत उत्तर के लिए मेरे अनुसरण का संदर्भ लें ।
user12345

4
मुझे नहीं पता था कि बिल्ली को इस तरह इस्तेमाल किया जा सकता है! जैसे जर्नल एंट्री लिखना। यह भी पता नहीं है कि ctrl-d क्या करता है। धन्यवाद!
होउलेट

1
@Sandra - !!पहले इस्तेमाल नहीं किया था , भयानक। इसलिए अक्सर मैं सामान पसंद करता हूं cat /var/log/apache/error.logऔर अनुमति से वंचित हो जाता हूं । यह भी इतिहास से आईडी के साथ किया जा सकता है sudo !1419, यह 1419sudo के रूप में इतिहास में लाइन पर कमांड निष्पादित करेगा ।
साइक्लोनोस्कोप

172

कैसा रहेगा:

echo "hello" >> <filename>

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

आप भी printfउसी तरह से उपयोग कर सकते हैं :

printf "hello" >> <filename>

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

set -o noclobber

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

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

echo "hello" >| <filename>

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

echo -n "hello" >> <filename>

संदर्भ


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

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

1
बेहतर sudo rm -r / की तुलना में sudo rm -rf /! ^ _ ^ क्या कोई ध्वज है जो मौजूदा फ़ाइल की सामग्री को अधिलेखित करने से पहले पुष्टि के लिए पूछेगा >? सचेत करना कि हमेशा इस तरह के झंडे का इस्तेमाल करना ऐसा लगता है कि यह एक अच्छा विचार होगा।
साठ4

2
@ sixty4bit - आप set -o noclobberअपने में जोड़ सकते हैं .bashrcतो आप एक विशेष विशेष वाक्यविन्यास का उपयोग किए बिना एक मौजूदा फ़ाइल को अधिलेखित नहीं कर सकतेecho "hello" >| <filename>
Cyclonecode

क्या आप एक उदाहरण दे सकते हैं जहां फ़ाइल को "myFile.txt" या कुछ और कहा जाता है? मुझे यकीन नहीं है कि यह आपके उदाहरण में <फ़ाइल नाम> या फ़ाइल नाम है
bharal

24

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

echo "text" | tee -a filename >/dev/null

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

जरूरत है तो sudo , तो उपयोग करें:

echo "text" | sudo tee -a filename >/dev/null

अंत में> / देव / अशक्त क्यों?
क्वाड्राइवियम

1
>/dev/nullअंत रोकता है "पाठ" पर आपके कंसोल में दिखाया जा सकता है।
user9869932

13

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

स्क्रिप्ट में इसका उपयोग करने पर आपको अंत में निर्दिष्ट करने के लिए CTRL-D के अलावा कुछ और चाहिए । इसके बजाय यह प्रयास करें:

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

यह पाठ को निर्दिष्ट फ़ाइल में जोड़ देगा ("EOF" सहित) नहीं।

यह यहां एक दस्तावेज (या हेरेडोक) का उपयोग करता है ।

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

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

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

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

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF

मैं cat << 'EOF' >वर्षों से उपयोग कर रहा हूं और मुझे पता नहीं है कि क्या cat << 'EOF' >>करना है! धन्यवाद
FreeSoftwareServers
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.