হাই আমি কোনও ফাইলে পাঠ্য পাঠাতে চাই। উদাহরণস্বরূপ, আমি একটি টোড.টিএসটিএস ফাইলের শুরুতে কাজগুলি যুক্ত করতে চাই। আমি সচেতন 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 moreutils
OS 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]