ইউনিক্স একটি ফাইলের পাঠ্য প্রিপেন্ড করতে আদেশ


126

কোনও পাঠ্য ফাইলে কিছু স্ট্রিং ডেটা প্রিপেন্ড করার জন্য কি ইউনিক্স কমান্ড রয়েছে?

কিছুটা এইরকম:

prepend "to be prepended" text.txt

আপনি কি একটি একক কমান্ড খুঁজছেন, বা একটি ছোট স্ক্রিপ্ট / ওরফে কমান্ড ঠিক আছে?
লেভন

2
আপনি যদি সমস্ত উত্তর একত্রিত করেন তবে এটি সম্ভবত সবচেয়ে কমপ্যাক্ট উপায়:<<(echo "to be prepended") < text.txt | sponge text.txt
শ্রীধর সারনোবাত

এই প্রশ্নটি সত্যই প্রচুর লোকের মধ্যে সৃজনশীলতা প্রকাশ করেছে!
রিচার্ড জেসোপ

উত্তর:


111
sed -i.old '1s;^;to be prepended;' inFile
  • -iপরিবর্তনের জায়গায় লিখুন এবং কোনও এক্সটেনশন দেওয়া থাকলে ব্যাকআপ নিন। (এই ক্ষেত্রে, .old)
  • 1s;^;to be prepended;;কমান্ড ডিলিমিটার হিসাবে ব্যবহার করে প্রদত্ত প্রতিস্থাপনের স্ট্রিংয়ের মাধ্যমে প্রথম লাইনের শুরুটি প্রতিস্থাপন করে ।

19
আপনি যদি কমান্ডটি দিয়ে কিছু ব্যাখ্যা যোগ করতে পারতেন তবে এটি অন্যের পক্ষে সহায়ক হবে যে সেডের কাজগুলির সাথে এতটা পরিচিত নয়। ওপি \nপ্রিপেন্ডের পরে sertোকাতে চাইবে ; তাদের প্রয়োজন উপর নির্ভর করে। ঝরঝরে সমাধান।
লেভন

হ্যাঁ, একটি ব্যাখ্যা দুর্দান্ত হবে। inFileএর পথের মধ্যে ডিরেক্টরিগুলি অন্তর্ভুক্ত করা যাবে ?
জাকদানস

3
@ লাইভন আমি সম্পূর্ণরূপে একটি sertোকাতে চেয়েছিলাম \n। মন্তব্যগুলি আগে পড়া উচিত ছিল। অভিশাপ।
চিশাকু

আমার ক্ষেত্রে আমি চাপ দেওয়া লাইনের শেষে একটি আধা-কোলন রাখতে চাই, তাই আমি সাথে গেলাম'1s;^;my-prepended-line\;\n;'
সামগামজি

5
মনে রাখবেন যে '\ n' কেবল জিএনইউ সেডের জন্য কাজ করে, বিএসডি নয় (যেমন ওএসএক্স, ফ্রিবিএসডি ইত্যাদি)। সেই সঙ্গে আরো পোর্টেবল হওয়ার জন্য, দেখুন: stackoverflow.com/questions/1421478/...
jwd

164
printf '%s\n%s\n' "to be prepended" "$(cat text.txt)" >text.txt

2
এক লাইনে এবং মূল পাঠ্য ফাইলে! এটি সঠিক সহজ উত্তর। আমি অতিরিক্ত নতুন লাইন \ n প্রতিধ্বনি -e "সুপারিশ করব prep n $ (বিড়াল টেক্সট। টেক্সট)"> পাঠ্য.টেক্সট
ভিনসেন্টপেরিন.কম

32
এই সমাধানটিতে সমস্যা রয়েছে ... এটি "\ n" এর ঘটনাগুলিকে প্রকৃত নতুন লাইনে রূপান্তরিত করে ... সমস্যাযুক্ত যদি আপনি কোনও কোড ফাইলের সাথে স্ট্রিংগুলির সাথে প্রস্তুতি নিয়ে থাকেন যা "\ n" থাকে।
পল গো

1
আমার ফাইলে git config --get-regex $arg | sed -r 's/\t{3}/\\n/g';এটি ছিল \tএবং এটি রূপান্তরিত হওয়ার সাথে সাথে এটি মুছে যায় \n
hIpPy

8
এটি (1) পুরো ফাইলটিকে মেমরিতে লোড করে এবং (2) পুরো ফাইলটিকে একটি একক কমান্ডলাইন আর্গুমেন্টে আটকে দেয়। সহজ স্টাফ জন্য সূক্ষ্ম, কিন্তু সীমাবদ্ধতা সাবধান।
jwd

2
সর্বশেষে আমি চেষ্টা করেছিলাম, আমি বিশ্বাস করি এটি সত্যিই বড় ফাইলগুলিতে ছিন্ন হয়ে যাবে, যেখানে বিড়ালটি ওভাররাইটের আগে টেক্সট.টেক্সট এর সম্পূর্ণ বিষয়বস্তু পড়তে ব্যর্থ হয়। প্রতিধ্বনিতে -e বিকল্পটি যদি সমস্যা হয় তবে আপনি echo "to be prepended"$'\n'"$(cat text.txt)"
ব্যাশে

44

প্রক্রিয়া প্রতিস্থাপন

আমি অবাক হয়েছি কেউ এর উল্লেখ করেনি।

cat <(echo "before") text.txt > newfile.txt

যা গ্রহণযোগ্য উত্তরের চেয়ে যুক্তিযুক্তভাবে বেশি প্রাকৃতিক (কোনও কিছু মুদ্রণ করে এটিকে প্রতিস্থাপনের কমান্ডে পাইপ করা হচ্ছে শব্দতাত্ত্বিকভাবে পাল্টা স্বজ্ঞাত)।

... এবং রায়ান উপরে যা বলেছিল তা হাইজ্যাক করে spongeআপনার সাথে একটি অস্থায়ী ফাইলের প্রয়োজন নেই:

sudo apt-get install moreutils
<<(echo "to be prepended") < text.txt | sponge text.txt

সম্পাদনা: দেখে মনে হচ্ছে বোর্ন শেলে এটি কাজ করে না /bin/sh


এখানে স্ট্রিং (কেবলমাত্র zsh)

এখানে একটি স্ট্রিং ব্যবহার করে - <<<আপনি করতে পারেন:

<<< "to be prepended" < text.txt | sponge text.txt

3
এই উত্তরটি আমার পক্ষে বিজয়ী। কেবল বিল্টইনগুলির সাথে সহজ এবং অর্জনযোগ্য। ভাল কাজ!
পিয়ার্সিপি

1
@ পিয়ারসিপি আমি সম্মত! এটি অনেক সাহায্য করেছে, আপনাকে শ্রীধর-সারনোব্যাট ধন্যবাদ।

সমস্যাটি হ'ল 2 টি ফাইল নয় 1 টি ফাইল রয়েছে। উত্তরের প্রথম লাইনটি আসলে কাজ করে না। শেষ লাইনটি কাজ করতে পারে (তবে এটি স্পঞ্জের প্রয়োজন)।
ভাসিলিনভিকভ

1
স্পঞ্জ কি করে?
হেমন্ত

1
আপনার <<(echo "to be prepended") < text.txtএবং <<< "to be prepended" < text.txtনির্মাণগুলি ব্যাশে কাজ করে না; তাদের zsh প্রয়োজন।
অ্যান্ডারস কাসের্গ

32

এটি একটি সম্ভাবনা:

(echo "to be prepended"; cat text.txt) > newfile.txt

আপনি সম্ভবত কোনও মধ্যবর্তী ফাইল সহজেই পাবেন না।

বিকল্প (শেল পলায়নের জন্য জটিল হতে পারে):

sed -i '0,/^/s//to be prepended/' text.txt

কৌশল 1) এখানে যে কোনও উত্তরের মধ্যে সবচেয়ে স্বজ্ঞাত, আমি অনুভব করি। আর সামান্য প্রকরণ: cat <(echo "to be prepended") text.txt > newfile.txt । এটি ভাবতে আসুন, আমি নিশ্চিত যে আমার সম্পর্কিত কিনা তাই আমি আলাদা উত্তর পোস্ট করছি।
শ্রীধর সারনোবাত

1
প্রথম পদ্ধতিটি ফাইলের অনুমতি সংরক্ষণ করবে না
Xlsx

অনুমতি সংরক্ষণের একমাত্র উপায় হ'ল স্পঞ্জ ব্যবহার
শ্রীধর সারনোব্যাট

20

এটি আউটপুট গঠনে কাজ করবে। - - এর অর্থ স্ট্যান্ডার্ড ইনপুট, যা ইকো থেকে পাইপের মাধ্যমে সরবরাহ করা হয়।

echo -e "to be prepended \n another line" | cat - text.txt

ফাইলটি পুনরায় লেখার জন্য একটি অস্থায়ী ফাইল প্রয়োজন যা ইনপুট ফাইলটিতে ফিরে পাইপ করতে পারে না।

echo "to be prepended" | cat - text.txt > text.txt.tmp
mv text.txt.tmp text.txt

2
এটি text.txtঅনুরোধ করা সত্ত্বেও ফাইলটিতে পাঠ্যটি প্রিপেন্ড করে না , তবে এটি স্টডআউটে প্রদর্শন করে। যদি ওপি
লেভন

1
এটি অবশ্যই "প্রেন্ডেন্ড করা হবে" এবং তারপরে "পাঠ্য। টেক্সট" এর সামগ্রী মুদ্রণ করবে। তবে আমি টেক্সটটি ফাইলটিতে চাপিয়ে দিতে চাই
ওয়ান টু থ্রি

1
এবং যদি আমার একাধিক লাইনের পাঠ্য থাকে? আমি কীভাবে নতুন লাইনের চরিত্রটিকে অন্তর্ভুক্ত করব?
এক দুই তিন

এটি দুর্দান্ত হবে তবে ব্যাশ এটি পছন্দ করে না: Re রাইটরাইটবেস / | প্রতিধ্বনি করুন বিড়াল - ওয়েব / .htaccess> ওয়েব / .htaccess বিড়াল: ওয়েব / .htaccess: ইনপুট ফাইল আউটপুট ফাইল
জিক-মের্লিন

14

আদমের উত্তর পছন্দ করুন

আমরা স্পঞ্জ ব্যবহার করা সহজ করে তুলতে পারি । এখন আমাদের একটি অস্থায়ী ফাইল তৈরি করে এটির নতুন নামকরণের দরকার নেই

echo -e "to be prepended \n another line" | cat - text.txt | sponge text.txt

এটি আমার পক্ষে কাজ করার একমাত্র সমাধান ছিল। এটি যথেষ্ট মজার যে আমার সার্ভারের নাম স্পঞ্জবব।
Anমার আন

10

যদি এটি প্রতিস্থাপনযোগ্য হয় ইনপুট ফাইলটি তবে:

বিঃদ্রঃ:

  • এটি করার ফলে অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া হতে পারে, উল্লেখযোগ্যভাবে একটি নিয়মিত ফাইলের সাথে একটি সিমিলিংক প্রতিস্থাপন করা, ফাইলে বিভিন্ন অনুমতি নিয়ে শেষ হওয়া এবং ফাইলের তৈরির (জন্মের) তারিখ পরিবর্তন করা।

  • sed -iপ্রিন্স জন ওয়েসলির উত্তরে যেমন অন্ততপক্ষে মূল অনুমতিগুলি পুনরুদ্ধার করার চেষ্টা করা হয়, তবে অন্যান্য সীমাবদ্ধতাগুলিও প্রযোজ্য।

এখানে একটি সহজ বিকল্প যা একটি অস্থায়ী ফাইল ব্যবহার করে (এটি শিমের সমাধান যেমন করে মেমোরিতে পুরো ইনপুট ফাইলটি পড়া এড়াতে পারে):

{ printf 'to be prepended'; cat text.txt; } > tmp.txt && mv tmp.txt text.txt

একটি ব্যবহার গ্রুপ কমান্ড ( { ...; ...; }) একটি ব্যবহার তুলনায় সামান্য বেশি কার্যকরী subshell ( (...; ...),) হিসাবে 0xC0000022L এর সমাধান

সুবিধাগুলি হ'ল:

  • নতুন পাঠ্যটি সরাসরি প্রথম লাইনে সরাসরি যুক্ত করা উচিত কিনা বা এটি নতুন লাইন (গুলি) হিসাবে সন্নিবেশ করা উচিত (কেবল যুক্তির সাথে সংযোজন \nকরা উচিত printf) এটি নিয়ন্ত্রণ করা সহজ।

  • sedসমাধানের বিপরীতে , ইনপুট ফাইলটি খালি ( 0বাইট) থাকলে এটি কাজ করে ।


sedসমাধান যদি অভিপ্রায় এক বা একাধিক পূর্বে লিখুন হয় সরলীকৃত করা যেতে পারে পুরো লাইন বিদ্যমান সামগ্রী করার জন্য (অভিমানী ইনপুট ফাইল অ খালি):

sedএর i ফাংশন পুরো লাইনগুলি সন্নিবেশ করায়:

সঙ্গে গনুহ sed :

# Prepends 'to be prepended' *followed by a newline*, i.e. inserts a new line.
# To prepend multiple lines, use '\n' as part of the text.
# -i.old creates a backup of the input file with extension '.old'
sed -i.old '1 i\to be prepended' inFile

একটি পোর্টেবল বৈকল্পিক যা ম্যাকোস / বিএসডি এর সাথেও কাজ করে sed:

# Prepends 'to be prepended' *followed by a newline*
# To prepend multiple lines, escape the ends of intermediate
# lines with '\'
sed -i.old -e '1 i\
to be prepended' inFile

নোট করুন যে \প্রয়োজন পরে আক্ষরিক নিউলাইন ।


যদি ইনপুট ফাইলটি অবশ্যই জায়গায় সম্পাদনা করতে হবে (এর সমস্ত বৈশিষ্ট্য সহ এর ইনোড সংরক্ষণ করা):

সম্মানজনক edPOSIX ইউটিলিটি ব্যবহার করে :

বিঃদ্রঃ:

  • edসর্বদা ইনপুট ফাইলটি সম্পূর্ণ মেমরির মধ্যে পড়ে।

সরাসরি প্রথম লাইনে प्रीপেন্ড করতে (যেমন হিসাবে sed, ইনপুট ফাইলটি সম্পূর্ণ খালি ( 0বাইট)) থাকলে এটি কাজ করবে না :

ed -s text.txt <<EOF
1 s/^/to be prepended/
w
EOF
  • -sদমন করা edস্থিতি বার্তা।
  • এখানে কীভাবে কমান্ডগুলি edমাল্টি-লাইন -ডকুমেন্ট ( <<EOF\n...\nEOF) হিসাবে স্ট্যান্ডিনের মাধ্যমে সরবরাহ করা হবে ; ডিফল্টরূপে স্ট্রিং সম্প্রসারণ করা হয় (শেল ভেরিয়েবল ইন্টারপোলেট করা হয়) যেমন নথি সঞ্চালিত; দমন করতে উদ্বোধনী ডিলিমিটারটি উদ্ধৃত করুন (যেমন, <<'EOF')।
  • 1 1 ম লাইনটিকে বর্তমান রেখা তৈরি করে
  • ফাংশন sবর্তমান লাইনে একটি রেজেক্স-ভিত্তিক স্ট্রিং প্রতিস্থাপন সম্পাদন করে sed; আপনি প্রতিস্থাপন পাঠ্যে আক্ষরিক\ নিউলাইনগুলি অন্তর্ভুক্ত করতে পারেন তবে সেগুলি অবশ্যই আটকানো হবে।
  • wফলাফলটি ইনপুট ফাইলটিতে ফিরে আসে (পরীক্ষার জন্য, ইনপুট ফাইলটি পরিবর্তন না করে কেবল ফলাফল মুদ্রণের জন্য প্রতিস্থাপন wকরে )।,p

করতে এক বা একাধিক পূর্বে লিখুন পুরো লাইন :

যেমনটি হিসাবে sed, iফাংশনটি ablyোকানোর জন্য পাঠ্যটিতে অবিচ্ছিন্নভাবে একটি নতুন পেজ যুক্ত করে।

ed -s text.txt <<EOF
0 i
line 1
line 2
.
w
EOF
  • 0 iতোলে 0(ফাইল শুরুতেই) বর্তমান লাইন এবং মোড সন্নিবেশ শুরু হয়েছে ( i); নোট করুন যে লাইন নম্বরগুলি অন্যথায়- 1ভিত্তিক।
  • নিম্নলিখিত রেখাগুলি বর্তমান লাইনের আগে sertোকানোর জন্য পাঠ্য যা .তার নিজস্ব লাইনে সমাপ্ত হয় ।

7

সম্ভবত অন্তর্নির্মিত কিছুই না, তবে আপনি নিজের সহজেই লিখতে পারেন, এটির মতো:

#!/bin/bash
echo -n "$1" > /tmp/tmpfile.$$
cat "$2" >> /tmp/tmpfile.$$
mv /tmp/tmpfile.$$ "$2"

অন্তত এমন কিছু ...


6
অস্থায়ী ফাইলের নামের অংশ হিসাবে $$ (বর্তমান পিআইডি) ব্যবহার করার জন্য +1। যদি সাধারণ ব্যবহারের জন্য কোনও স্ক্রিপ্ট তৈরি করা হয় তবে এটি একই সাথে একই ব্যবহারকারীকে একই স্ক্রিপ্ট চালিয়ে টেম্প ফাইলটি ওভাররাইট করা থেকে অন্য ব্যবহারকারীকে বাধা দেবে।
ই ব্রাউন

3
$$উত্পাদন কোডের জন্য ব্যবহার অপ্রতুল, যদিও (গুগল সিমলিংক আক্রমণ); তবে এটি অবশ্যই একটি স্থির ফাইলের নামের চেয়ে ভাল।
ট্রিপলি

1
শুধু ব্যবহার করুনmktemp
মেওয়া

7

কিছু পরিস্থিতিতে প্রিপেন্ড করা পাঠ্য কেবল স্টিডিন থেকে পাওয়া যায়। তাহলে এই সমন্বয়টি কাজ করবে।

echo "to be prepended" | cat - text.txt | tee text.txt

আপনি যদি teeআউটপুট বাদ দিতে চান তবে যুক্ত করুন > /dev/null


আমি এই উত্তরটি সত্যিই পছন্দ করি। এটি করার একটি খুব পরিষ্কার এবং পরিষ্কার উপায়। টি ব্যবহার হ'ল ইনপুট ফাইলে বিড়াল আউট দেওয়ার চেষ্টা করার সমস্যার একটি প্রাকৃতিক সমাধান। নতুন নামকরণ সহ কোনও হ্যাক নেই। এখনই সর্বোচ্চ ভোট দেওয়া সমাধানের চেয়ে ভাল, কারণ এটি কোনও নতুন ফাইল তৈরি করে না। এটি সংযোজন পরিবর্তে প্রিপেন্ডিংয়ের জন্য আপনি মূলত নিকটস্থ হন >>
ডিসি 2

এটি সবচেয়ে ভাল এবং পরিষ্কার উত্তর।
নার্ডোক

6
এমন কোনও গ্যারান্টি আছে যা পড়ার আগে teeকোঁকড়ে না পড়ে? আমি মনে করি না - যা এই সমাধানটি ফাইলের স্বাস্থ্যের পক্ষে বিপজ্জনক করে তুলবে। text.txtcat
জোনাথন লেফলার

3
পুনঃটুইট করেছেন আমি পরীক্ষা করার জন্য এই কোড চেষ্টা: lenA=1000000; yes a | head -c $lenA > a.txt; lenB=10000; b=$(yes b | head -c $lenB); echo "$b" | cat - a.txt | tee a.txt > /dev/null। যদি lenA1000000 (1 এমবি ফাইল) হয় এবং lenBএটি 10000 (10 কেবি টেক্সট প্রিপেন্ড) হয়, তবে "a.txt" ফাইলটি "বি" অক্ষরের 20 কেবি দিয়ে ওভাররাইট করা হয়। এটি পুরোপুরি ভাঙা। এখন, আপনি যদি প্রেন্ডেন্ড করতে 1Mb a.txt এবং 1Mb টেক্সট ব্যবহার করেন, 7 teeজিবি + ফাইল তৈরির লুপে যান, আমাকে কমান্ডটি থামাতে হবে। সুতরাং, এটি সুস্পষ্ট যে ফলাফলটি বৃহত আকারের জন্য অনাকাঙ্ক্ষিত। এটি ছোট আকারে কাজ করা উচিত কিনা আমার কোনও তথ্য নেই।
ভ্যাসিলিনভিকভ

3
এটিকে ধারণাগত শর্তে রাখার জন্য: ইনপুট ফাইলটি যদি আপনার সিস্টেমের পাইপলাইন বাফার আকারের চেয়ে বড় হয় তবে আজকাল সাধারণত KB৪ কেবি হয় এই কমান্ডটি ডেটা হারাতে পারে
mklement0

7

সমাধান:

printf '%s\n%s' 'text to prepend' "$(cat file.txt)" > file.txt

মনে রাখবেন যে এটি সমস্ত ধরণের ইনপুটগুলিতে নিরাপদ, কারণ কোনও বিস্তৃতি নেই। উদাহরণস্বরূপ, আপনি যদি অর্থ পরিশোধ করতে চান তবে !@#$%^&*()ugly text\n\t\nএটি কেবল কাজ করবে:

printf '%s\n%s' '!@#$%^&*()ugly text\n\t\n' "$(cat file.txt)" > file.txt

বিবেচনার জন্য বাকি অংশটি কমান্ড প্রতিস্থাপনের সময় ফাইলের শেষে সাদা স্থান অপসারণ "$(cat file.txt)"। এর জন্য সমস্ত কাজের ক্ষেত্র তুলনামূলকভাবে জটিল। আপনি যদি file.txt এর শেষে নতুন লাইনের সংরক্ষণ করতে চান তবে এটি দেখুন: https://stackoverflow.com/a/22607352/1091436


এটা ভাল। সুপার পোর্টেবল এবং নতুন ফাইল উত্পন্ন করার দরকার নেই। ধন্যবাদ!
pyb

1
শুধুমাত্র এই সঙ্গে সমস্যা আসে বিষয়বস্তু file.txtচেয়ে আর্গুমেন্ট প্রাপ্ত করতে তালিকায় লাগানো যেতে পারে বড় printf
জোনাথন লেফলার 26'18

6

আর একটি উপায় ব্যবহার করে sed:

sed -i.old '1 {i to be prepended
}' inFile

যদি রেপেন্ট করা উচিত লাইনটি মাল্টিলাইন হয়:

sed -i.old '1 {i\ 
to be prepended\
multiline
}' inFile

কেন নয় sed -i '1ito be prepended' inFile- বা এটি কেবল জিএনইউ সেডের জন্য অনুমোদিত?
ব্যবহারকারী অজানা

@ ইউজারুননড: স্ট্যান্ডার্ডে sed, iকমান্ডটি একটি ব্যাকস্ল্যাশ এবং একটি নতুন লাইন অনুসরণ করে এবং ইনপুট প্রতিটি লাইন ব্যাকস্ল্যাশ সহ শেষ প্রান্ত ব্যতীত হয়। sedআপনার সম্পর্কে জিজ্ঞাসা করা লাইনের পাশাপাশি জিএনইউ শর্টহ্যান্ডগুলি অনুমতি দেয় তবে এটি কেবল জিএনইউই sedকরে। '
জোনাথন লেফলার 26'20

3

যেমন বাশে পরীক্ষিত (উবুন্টুতে), যদি কোনও পরীক্ষার ফাইল দিয়ে শুরু করে;

echo "Original Line" > test_file.txt

আপনি মৃত্যুদণ্ড কার্যকর করতে পারেন;

echo "$(echo "New Line"; cat test_file.txt)" > test_file.txt

বা, যদি বাশের সংস্করণটি $ () এর জন্য খুব পুরানো হয় তবে আপনি ব্যাকটিক্স ব্যবহার করতে পারেন;

echo "`echo "New Line"; cat test_file.txt`" > test_file.txt

এবং "test_file.txt" এর নিম্নলিখিত বিষয়বস্তুগুলি পান;

New Line
Original Line

কোনও মধ্যস্থতাকারী ফাইল নেই, কেবল বাশ / প্রতিধ্বনি।


2
সেরা উত্তর, আমি এই উত্তরটি ব্যবহার করে আমার ফাইলটি ঘোরানোর জন্য এই ওয়ান-লাইনারটি লিখেছি: আমি ইন $ (<file2.txt) এর জন্য; প্রতিধ্বনি করুন "$ (প্রতিধ্বনি $ i; বিড়াল file.txt)"> file.txt; সম্পন্ন;
আওরঙ্গজেব

2

আরেকটি মোটামুটি সোজা ফরোয়ার্ড সমাধান হ'ল:

    $ echo -e "string\n" $(cat file)

এটি আমার জন্য কাজ করেছে ... ইনপুট ফাইল থেকে মাল্টিলিনগুলি বজায় রাখতে আপনি এটাকে উদ্ধৃতিতে গুটিয়ে রাখতে পারেন তাই এর মতো কিছু: ইকো-ই "স্ট্রিং \ n" "$ (বিড়াল ~ / file.txt) "> ~ / file.txt;
ক্রেগ ওয়েন

2
হচ্ছে না catউদ্ধৃতি চিহ্ন মধ্যে পরামিতি সম্প্রসারণ একটি জন্য একটি প্রশংসনীয় ভাল কারণ নেই downvote । এই কোডটি ফাইলের বিষয়বস্তুগুলিকে শব্দগুলিতে বিভক্ত করছে এবং সেই শব্দের প্রত্যেককে পৃথক যুক্তি হিসাবে পাস করছে echo। আপনি মূল যুক্তি গণ্ডি হারান, আপনি হারান নতুন লাইন / ট্যাব / ইত্যাদি। এবং অন্য কোনো স্ট্রিং \tএবং \nমূল পাঠে ট্যাব এবং নতুন লাইন পরিবর্তে যেমন তারা রাখা হচ্ছে দিয়ে প্রতিস্থাপিত করা হয়।
চার্লস ডাফি

1

আপনি যদি vi / vim পছন্দ করেন তবে এটি আপনার স্টাইলটি আরও বেশি হতে পারে।

printf '0i\n%s\n.\nwq\n' prepend-text | ed file

0
# create a file with content..
echo foo > /tmp/foo
# prepend a line containing "jim" to the file
sed -i "1s/^/jim\n/" /tmp/foo
# verify the content of the file has the new line prepened to it
cat /tmp/foo

0

আমি কোনও ফাংশন সংজ্ঞায়িত করার এবং তারপরে আমদানি এবং যেখানে প্রয়োজন সেখানে ব্যবহার করার পরামর্শ দেব।

prepend_to_file() { 
    file=$1
    text=$2

    if ! [[ -f $file ]] then
        touch $file
    fi

    echo "$text" | cat - $file > $file.new

    mv -f $file.new $file
}

তারপরে এটির মতো ব্যবহার করুন:

prepend_to_file test.txt "This is first"
prepend_to_file test.txt "This is second"

আপনার ফাইলের সামগ্রীগুলি তখন তা হবে:

This is second
This is first

আমি পরিবর্তন লগ আপডেটের প্রয়োগের জন্য এই পদ্ধতির ব্যবহার করতে চলেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.