लिनक्स में किसी फ़ाइल में टेक्स्ट को जोड़ने का सबसे आसान तरीका क्या है?
मुझे इस प्रश्न पर एक नज़र थी , लेकिन स्वीकृत जवाब एक अतिरिक्त कार्यक्रम ( 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, यह 1419sudo के रूप में इतिहास में लाइन पर कमांड निष्पादित करेगा ।
कैसा रहेगा:
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' >>करना है! धन्यवाद