হাই আমি কোনও ফাইলে পাঠ্য পাঠাতে চাই। উদাহরণস্বরূপ, আমি একটি টোড.টিএসটিএস ফাইলের শুরুতে কাজগুলি যুক্ত করতে চাই। আমি সচেতন echo 'task goes here' >> 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আক্ষরিক ব্যাকস্ল্যাশ এন পায় তবে এটি এটিকে নতুন লাইনে রূপান্তরিত করবে না। অন্য কিছু নিশ্চয়ই তা করেছে। পরিবর্তে cat, hexdump -Cআপনি আসলে ব্যাকস্ল্যাশ এবং এন প্রেরণ করছেন বা এটি কোনও নতুন লাইন কিনা তা দেখতে পাইপিংয়ের চেষ্টা করুন। আপনি cat -eলাইন শেষ দেখানোর চেষ্টা করতে পারেন ।
1মানে পরের কমান্ডটি কেবলমাত্র ফাইলের মধ্যে একটিতে লাইন করে এবং iকমান্ডটি সন্নিবেশ করা হয়। "ঠিকানাগুলি" বিভাগের অধীনে ম্যান পৃষ্ঠাটিতে এবং "জিরো- বা ওয়ান-ঠিকানা আদেশগুলি" বিভাগে দেখুন।
আমার মতে একটি সহজ বিকল্প হ'ল:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
এটি কাজ করে কারণ অভ্যন্তরীণ কমান্ডটি $(...)পূর্বে todo.txtওভাররাইট করার আগে সম্পাদিত হয়> todo.txt
অন্য উত্তরগুলি ঠিকঠাকভাবে কাজ করার সময়, আমি মনে রাখা এটিকে আরও সহজ মনে করি কারণ আমি প্রতিদিন প্রতিধ্বনি এবং বিড়াল ব্যবহার করি।
সম্পাদনা: যদি কোনও ব্যাকস্ল্যাশ থাকে তবে এই সমাধানটি খুব খারাপ ধারণা todo.txt, কারণ -eপতাকা প্রতিধ্বনির জন্য ধন্যবাদ তাদের ব্যাখ্যা করবে। আর একটি, প্রিফেস স্ট্রিংয়ে নতুন লাইনগুলি পাওয়ার আরও সহজ উপায় হ'ল ...
echo "task goes here
$(cat todo.txt)" > todo.txt
... কেবল নিউলাইনগুলি ব্যবহার করার জন্য। অবশ্যই, এটি আর ওয়ান-লাইনার নয়, তবে বাস্তবে এটি আগে ওয়ান-লাইনার ছিল না। যদি আপনি কোনও স্ক্রিপ্টের ভিতরে এটি করছেন, এবং ইনডেন্টিং সম্পর্কে উদ্বিগ্ন হন (উদাহরণস্বরূপ আপনি এটি কোনও ফাংশনের অভ্যন্তরে চালাচ্ছেন) এটিকে এখনও পুরোপুরি ফিট করার জন্য কয়েকটি কাজের সুযোগ রয়েছে যার মধ্যে রয়েছে তবে সীমাবদ্ধ নয়:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
এছাড়াও, যদি আপনি একটি নতুন লাইন শেষের দিকে যুক্ত হয় কিনা সে সম্পর্কে যত্নশীল হন তবে todo.txtএগুলি ব্যবহার করবেন না। ঠিক আছে, দ্বিতীয় থেকে শেষটি বাদে। এটি শেষের সাথে গণ্ডগোল করে না।
-eএছাড়াও কি টু ডট টেক্সটের ভিতরে পালানোর সিকোয়েন্সগুলি রূপান্তর করা হবে না ?
moreutilsনামক একটি চমৎকার টুল আছে sponge:
echo "task goes here" | cat - todo.txt | sponge todo.txt
এটি STDIN "ভিজিয়ে" ফেলবে এবং তারপরে ফাইলটিতে লিখবে, যার অর্থ আপনাকে অস্থায়ী ফাইলগুলি নিয়ে এবং এগুলি ঘুরে বেড়াতে হবে না।
আপনি পেতে পারেন moreutilsমাধ্যমে অনেক লিনাক্স ডিস্ট্রো সঙ্গে apt-get install moreutilsOS X এর উপর ব্যবহার করে, বা 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আসল ফাইলের of
যদি পাঠ্য ফাইলটি মেমরিতে ফিট করার জন্য যথেষ্ট ছোট হয় তবে আপনাকে এটির সাথে প্রতিস্থাপনের জন্য অস্থায়ী ফাইল তৈরি করতে হবে না। আপনি এগুলি সমস্ত মেমরিতে লোড করতে এবং ফাইলটিতে আবার লিখে দিতে পারেন।
echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt
পুরো ফাইলটি না লিখে ফাইলের শুরুতে লাইন যুক্ত করা অসম্ভব।
text=$(cat file)। শুধুমাত্র পাঠ্য ব্যবহারের ক্ষেত্রে সতর্ক থাকুন, কারণ শেল ভেরিয়েবলগুলি বাইনারি পরিষ্কার নয় mywiki.wooledge.org/BashFAQ/058
আপনি কোনও ফাইলের শুরুতে সামগ্রী sertোকাতে পারবেন না cannot কেবলমাত্র আপনি যা করতে পারেন তা হ'ল হয় বিদ্যমান সামগ্রীর প্রতিস্থাপন করা বা ফাইলের বর্তমান সমাপ্তির পরে বাইট যুক্ত করা।
আপনার প্রশ্নের যে কোনও সমাধানের পরে অস্থায়ী ফাইল (বা বাফার) তৈরি করতে হবে (মেমরিতে বা ডিস্কে) যা শেষ পর্যন্ত মূল ফাইলটি ওভাররাইট করে।
নতুন ফাইলটি তৈরি করার সময় মূল ফাইল সংরক্ষণ করে ডেটা হারাতে হবে না, প্রক্রিয়া চলাকালীন ফাইল সিস্টেমটি পূর্ণ হওয়া উচিত। উদাহরণ:
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
গিটব্যাশ + উইন্ডোজ 10 + মাল্টলাইন :
এখানে এমন একটি সংস্করণ যা আপনাকে মাল্টি-লাইন স্ট্রিংগুলি ব্যবহার করতে দেয় ।
##############################################
## 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]