लिनक्स में किसी फ़ाइल में टेक्स्ट को जोड़ने का सबसे आसान तरीका क्या है?
मुझे इस प्रश्न पर एक नज़र थी , लेकिन स्वीकृत जवाब एक अतिरिक्त कार्यक्रम ( sed
) का उपयोग करता है, मुझे यकीन है कि इसके साथ echo
या इसके समान आसान तरीका होना चाहिए ।
लिनक्स में किसी फ़ाइल में टेक्स्ट को जोड़ने का सबसे आसान तरीका क्या है?
मुझे इस प्रश्न पर एक नज़र थी , लेकिन स्वीकृत जवाब एक अतिरिक्त कार्यक्रम ( sed
) का उपयोग करता है, मुझे यकीन है कि इसके साथ echo
या इसके समान आसान तरीका होना चाहिए ।
जवाबों:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
अनिवार्य रूप से, आप किसी भी पाठ को फ़ाइल में डंप कर सकते हैं। CTRL-D एक फ़ाइल के अंत सिग्नल भेजता है, जो इनपुट को समाप्त करता है और आपको शेल में वापस करता है।
sudo !!
करता हूं - जो अंतिम कमांड को पहले से निष्पादित करता है sudo
। मुझे हाल ही में पता चला कि यह भी साथ काम करता है nano
(गलती से nano nano auth
... की कोशिश करके )
!!
पहले इस्तेमाल नहीं किया था , भयानक। इसलिए अक्सर मैं सामान पसंद करता हूं cat /var/log/apache/error.log
और अनुमति से वंचित हो जाता हूं । यह भी इतिहास से आईडी के साथ किया जा सकता है sudo !1419
, यह 1419
sudo के रूप में इतिहास में लाइन पर कमांड निष्पादित करेगा ।
कैसा रहेगा:
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>
संदर्भ
cat
, लेकिन आप >>
इसके बजाय उपयोग करने के लिए सुनिश्चित करने के साथ बेहतर होंगे>
!
sudo rm -r /
=)
sudo rm -r /
की तुलना में sudo rm -rf /
! ^ _ ^ क्या कोई ध्वज है जो मौजूदा फ़ाइल की सामग्री को अधिलेखित करने से पहले पुष्टि के लिए पूछेगा >
? सचेत करना कि हमेशा इस तरह के झंडे का इस्तेमाल करना ऐसा लगता है कि यह एक अच्छा विचार होगा।
set -o noclobber
अपने में जोड़ सकते हैं .bashrc
तो आप एक विशेष विशेष वाक्यविन्यास का उपयोग किए बिना एक मौजूदा फ़ाइल को अधिलेखित नहीं कर सकतेecho "hello" >| <filename>
अन्य संभावित तरीका है:
echo "text" | tee -a filename >/dev/null
-a
फ़ाइल के अंत में संलग्न कर देगा।
जरूरत है तो sudo
, तो उपयोग करें:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
अंत रोकता है "पाठ" पर आपके कंसोल में दिखाया जा सकता है।
स्वीकृत उत्तर तक का पालन करें।
स्क्रिप्ट में इसका उपयोग करने पर आपको अंत में निर्दिष्ट करने के लिए 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' >>
करना है! धन्यवाद