नमस्ते मैं एक फ़ाइल के लिए पाठ प्रस्तुत करना चाहता हूँ। उदाहरण के लिए, मैं एक todo.txt फ़ाइल की शुरुआत में कार्य जोड़ना चाहता हूं। मुझे पता है, echo 'task goes here' >> todo.txt
लेकिन यह फ़ाइल के अंत में लाइन जोड़ता है (जो मुझे चाहिए)।
नमस्ते मैं एक फ़ाइल के लिए पाठ प्रस्तुत करना चाहता हूँ। उदाहरण के लिए, मैं एक todo.txt फ़ाइल की शुरुआत में कार्य जोड़ना चाहता हूं। मुझे पता है, echo 'task goes here' >> todo.txt
लेकिन यह फ़ाइल के अंत में लाइन जोड़ता है (जो मुझे चाहिए)।
जवाबों:
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
या
sed -i '1s/^/task goes here\n/' todo.txt
या
sed -i '1itask goes here' todo.txt
|
) संदेश ( echo '...'
) cat
जिसके लिए -
(मानक इनपुट) पहली फ़ाइल के todo.txt
रूप में और दूसरे के रूप में उपयोग करता है । cat
कई फ़ाइलों को जोड़ता है। >
नाम से एक फ़ाइल के लिए उत्पादन ( ) भेजें temp
। यदि तब से कोई त्रुटि ( &&
) नहीं है, cat
तो नाम बदलें ( mv
) temp
मूल फ़ाइल पर वापस जाएं ( todo.txt
)।
cat
शाब्दिक बैकस्लैश n प्राप्त होता है, तो यह इसे एक नई पंक्ति में परिवर्तित नहीं करेगा। कुछ और ही किया होगा। इसके बजाय cat
, पाइपिंग को hexdump -C
यह देखने की कोशिश करें कि क्या आप वास्तव में बैकस्लैश और एन भेज रहे हैं या यदि यह एक नई रूपरेखा है। तुम भी cat -e
लाइन अंत दिखाने की कोशिश कर सकते हैं।
1
मतलब है कि अगला कमांड केवल फाइल के लाइन एक पर है और i
कमांड इन्सर्ट है। "पते" अनुभाग के तहत और "शून्य- या एक- पता कमांड" अनुभाग के तहत आदमी पृष्ठ में देखें।
मेरी राय में एक सरल विकल्प है:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
यह काम करता है क्योंकि $(...)
इससे पहले के कमांड को निष्पादित किया todo.txt
जाता है> todo.txt
जबकि अन्य उत्तर ठीक काम करते हैं, मुझे यह याद रखना बहुत आसान लगता है क्योंकि मैं प्रतिदिन इको और बिल्ली का उपयोग करता हूं।
EDIT: यदि कोई बैकस्लैश अंदर हैं todo.txt
, तो यह समाधान बहुत बुरा विचार है , क्योंकि -e
झंडा गूंज के लिए धन्यवाद उन्हें व्याख्या करेगा। एक और, आसान तरीका है प्रस्तावना स्ट्रिंग में newlines पाने के लिए है ...
echo "task goes here
$(cat todo.txt)" > todo.txt
... बस newlines का उपयोग करने के लिए। निश्चित रूप से, यह अब वन-लाइनर नहीं है, लेकिन वास्तविक रूप से यह पहले भी एक-लाइनर नहीं था। यदि आप इसे किसी स्क्रिप्ट के अंदर कर रहे हैं, और इंडेंट करने के बारे में चिंतित हैं (जैसे कि आप इसे किसी फ़ंक्शन के अंदर निष्पादित कर रहे हैं) तो इसे अभी भी अच्छी तरह से फिट करने के लिए कुछ वर्कअराउंड हैं, जिनमें शामिल हैं:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
इसके अलावा, यदि आप इस बात की परवाह करते हैं कि क्या कोई नई पंक्ति इसके अंत में जोड़ी जाती है todo.txt
, तो इनका उपयोग न करें। खैर, दूसरे-से-आखिरी को छोड़कर। यह अंत के साथ गड़बड़ नहीं है।
-e
भी todo.txt के अंदर भागने के दृश्यों को परिवर्तित नहीं करेंगे ?
moreutils
कहा जाता है एक अच्छा उपकरण है sponge
:
echo "task goes here" | cat - todo.txt | sponge todo.txt
यह "STDIN सोख लेगा" और फिर फाइल पर लिख देगा, जिसका मतलब है कि आपको अस्थायी फ़ाइलों के बारे में चिंता करने और उन्हें इधर-उधर करने की ज़रूरत नहीं है।
आप प्राप्त कर सकते हैं moreutils
, के माध्यम से कई Linux distros के साथ apt-get install moreutils
ओएस एक्स पर का उपयोग कर, या Homebrew , साथ brew install moreutils
।
(echo 'ble'; cat todo.txt)
:-) के लिए जाऊंगा
आप पूर्व मोड में विम का उपयोग कर सकते हैं:
ex -s -c '1i|task goes here' -c x todo.txt
1
पहली पंक्ति का चयन करें
i
सम्मिलित
x
सहेजें और बंद करें
आप एक नई, अस्थायी फ़ाइल बना सकते हैं।
echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt
आप भी उपयोग sed
कर सकते हैं या awk
। लेकिन मूल रूप से वही होता है।
new_todo.txt
आंशिक रूप से ही लिखा जाए । मूल फ़ाइल खोने के लिए आपका समाधान दिखाई देता है।
rm
, मूल फ़ाइल का है।
यदि पाठ फ़ाइल स्मृति में फिट होने के लिए पर्याप्त छोटी है, तो आपको इसे बदलने के लिए एक अस्थायी फ़ाइल बनाने की आवश्यकता नहीं है। आप इसे सभी मेमोरी में लोड कर सकते हैं और इसे फाइल में वापस लिख सकते हैं।
echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt
संपूर्ण फ़ाइल को लिखे बिना फ़ाइल की शुरुआत में लाइनें जोड़ना असंभव है।
text=$(cat file)
। हालांकि केवल पाठ का उपयोग करने के लिए सावधान रहें, क्योंकि शेल चर द्विआधारी स्वच्छ mywiki.wooledge.org/BashFAQ/058
आप किसी फ़ाइल की शुरुआत में सामग्री नहीं डाल सकते। केवल एक चीज जो आप कर सकते हैं वह या तो मौजूदा सामग्री को बदल देती है या फ़ाइल के वर्तमान छोर के बाद बाइट्स को जोड़ देती है।
आपके प्रश्न के किसी भी समाधान के लिए फिर एक अस्थायी फ़ाइल (या बफर) बनाने की आवश्यकता होती है (मेमोरी या डिस्क पर) जो अंततः मूल फ़ाइल को अधिलेखित कर देगी।
नया बनाते समय मूल फ़ाइल को संरक्षित करके डेटा को न खोने से सावधान रहें, क्या प्रक्रिया के दौरान फ़ाइल सिस्टम पूर्ण होना चाहिए। उदाहरण के लिए:
cat <(echo task go there) todo.txt > todo.txt.new && mv todo.txt.new todo.txt
echo HOME=\"/g/Users/timregan/\" | cat - 'F:\Program Files\Git\etc\profile'
काम करता है, लेकिन cat <echo HOME=\"/g/Users/timregan/\" 'F:\Program Files\Git\etc\profile'
त्रुटि देता है "गूंज: ऐसी कोई फ़ाइल या निर्देशिका नहीं"
<
और के बीच एक स्थान (
वाक्यविन्यास को तोड़ देगा। कोशिश करेंcat <(echo HOME=\"/g/Users/timregan/\") 'F:\Program Files\Git\etc\profile'
आप उपयोग कर सकते हैं tee
:
echo 'task goes here' | cat - todo.txt | tee todo.txt
GitBash + Windows10 + मल्टीलाइन :
यहां एक संस्करण है जो आपको मल्टी-लाइन स्ट्रिंग्स का उपयोग करने देता है ।
##############################################
## This section for demo purpose only, ##
## So you can save entire file as ##
## whatever.sh and run it. ##
## ##
##############################################
> MY_TARGET_FILE.txt ##Make Or Clear File
echo "[STARTER_CONTENT]" >> MY_TARGET_FILE.txt
##############################################
## Below is main code:
##################################################
TARGET_FILE_VARIABLE="MY_TARGET_FILE.txt"
ADD_TO_HEAD_VARIABLE=$(cat << "HEREDOC_HEAD_TEXT"
//| +-------------------------------------+ |//
//| | | |//
//| | MESSAGE_FOR_HEAD_OF_FILE | |//
//| | | |//
//| +-------------------------------------+ |//
HEREDOC_HEAD_TEXT
)
##################################################
TAR=$TARGET_FILE_VARIABLE ##
TEX=$ADD_TO_HEAD_VARIABLE ##
echo "$TEX" | cat - $TAR > TEMP && mv TEMP $TAR ##
##################################################
## Expected contents of MY_TARGET_FILE.txt :
## //| +-------------------------------------+ |//
## //| | | |//
## //| | MESSAGE_FOR_HEAD_OF_FILE | |//
## //| | | |//
## //| +-------------------------------------+ |//
## [STARTER_CONTENT]