কোনও ফাইলকে প্রিপেন্ড করার জন্য একটি লাইনার শেল করুন


131

এটি সম্ভবত একটি জটিল সমাধান

আমি ">>" এর মতো একটি সহজ অপারেটর খুঁজছি, তবে প্রিপেন্ডিংয়ের জন্য।

আমি ভয় করি এর অস্তিত্ব নেই। আমাকে এরকম কিছু করতে হবে

 এমভি মাইফাইল টিএমপি
 বিড়াল মাইহেডার tmp> মাইফাইল

বুদ্ধিমান কিছু?


এর সাথে কী হয়েছে mktemp? আপনি তারপরে সর্বদা টেম্প ফাইলটি সাফ করতে পারেন ...
23

উত্তর:


29

হ্যাক নীচে একটি দ্রুত বন্ধ-কড়া উত্তর যা কাজ এবং প্রাপ্ত upvotes প্রচুর ছিল। এরপরে, প্রশ্নটি আরও জনপ্রিয় হওয়ার সাথে সাথে আরও সময় অতিবাহিত হওয়ার সাথে সাথে ক্ষুব্ধ লোকেরা রিপোর্ট করতে শুরু করল যে এটি কাজ করে তবে অদ্ভুত জিনিসগুলি ঘটতে পারে, বা এটি কোনওভাবেই কাজ করে না, তাই এটি একটি সময়ের জন্য ক্রুদ্ধভাবে অবনমিত হয়েছিল। এমন মজা।

সমাধানটি আপনার সিস্টেমে ফাইল বর্ণনাকারীদের যথাযথ প্রয়োগের কাজে লাগায় এবং, কারণ প্রয়োগটি নিক্সের মধ্যে উল্লেখযোগ্যভাবে পরিবর্তিত হয়, এটির সাফল্য সম্পূর্ণরূপে সিস্টেম নির্ভর, স্থিরভাবে অ-বহনযোগ্য, এবং এমনকি অস্পষ্টভাবে গুরুত্বপূর্ণ কোনও কিছুর উপর নির্ভর করা উচিত নয়।

এখন, সমস্ত উপায় উত্তর ছাড়াই ছিল:


সেই ( exec 3<> yourfile) লেখার পরে ফাইলটির জন্য অন্য একটি ফাইল বর্ণনাকারী তৈরি >&3করা একই ফাইলের দ্বিধা নিয়ে পড়া / লেখাকে কাটিয়ে উঠবে বলে মনে হয়। অ্যাডাব্লিক সহ 600 কে ফাইলগুলিতে আমার জন্য কাজ করে। তবে 'বিড়াল' ব্যবহার করে একই কৌশল চেষ্টা করা ব্যর্থ।

অ্যাডকে ( -v TEXT="$text") এর পরিবর্তনশীল হিসাবে প্রিপেন্ডেজ পাস করা আক্ষরিক উক্তি সমস্যাটি কাটিয়ে ওঠে যা 'সেড' দিয়ে এই কৌশলটি করতে বাধা দেয়।

#!/bin/bash
text="Hello world
What's up?"

exec 3<> yourfile && awk -v TEXT="$text" 'BEGIN {print TEXT}{print}' yourfile >&3

3
সতর্কতা: প্রথম লাইন ছাড়া আর কিছুই পরিবর্তন হয়নি তা নিশ্চিত করার জন্য আউটপুটটি পরীক্ষা করে দেখুন। আমি এই সমাধানটি ব্যবহার করেছি এবং এটি মনে হচ্ছে এটি কাজ করে, আমি লক্ষ্য করেছি যে কয়েকটি নতুন লাইন যুক্ত হয়েছে বলে মনে হচ্ছে। এগুলি কোথা থেকে এসেছে তা আমি বুঝতে পারি না, সুতরাং আমি নিশ্চিত হতে পারি না যে এই সমাধানটিতে আসলেই কোনও সমস্যা আছে তবে সচেতন হন।
18:58

1
উপরের বাশ উদাহরণে নোট করুন যে একাধিক লাইন প্রিপেন্ডিং প্রদর্শনের জন্য ডাবল উদ্ধৃতিগুলি গাড়ীর ফেরতের দিকে ছড়িয়ে পড়ে। আপনার শেল এবং পাঠ্য সম্পাদকটি সমবায় হচ্ছে তা পরীক্ষা করুন। \ r \ n মনে আসে।
জন মিঃ

4
সাবধানতার সাথে এটি ব্যবহার করুন! নীচের মন্তব্যটি দেখুন: স্ট্যাকওভারফ্লো.com
অ্যালেক্স

3
যদি এটি এখন অবিশ্বাস্য হয় তবে কীভাবে আরও ভাল সমাধান দিয়ে আপনার উত্তর আপডেট করবেন?
জাকদানস

একটি হ্যাক দরকারী যদি এবং কেবল যদি এটি সঠিকভাবে এটি কেন কাজ করে তা জানা থাকে এবং তাই যত্ন সহকারে বাধাগুলি কীভাবে পর্যবেক্ষণ করা হয় । আপনার দাবি অস্বীকার করা সত্ত্বেও, আপনার হ্যাক এই মানদণ্ডগুলি পূরণ করে না ("সম্পূর্ণ সিস্টেম নির্ভর", "এটি কাটিয়ে উঠেছে বলে মনে হচ্ছে", "আমার পক্ষে কাজ করে")। তাহলে আমরা আপনার দাবিত্যাগ গম্ভীরভাবে নিয়েছি, কোন এক আপনার হ্যাক ব্যবহার করা উচিত - এবং আমি রাজি। তাহলে আমরা কী রেখেছি? একটা শোরগোল। আমি দুটি অপশন দেখতে পাচ্ছি: (ক) আপনার উত্তর মুছুন, বা (খ) এটিকে একটি সাবধানী কাহিনীতে রূপান্তর করুন যা ব্যাখ্যা করে - কারণ যেমন প্রলোভনযুক্ত - এই পদ্ধতিটি সাধারণত কাজ করতে পারে না
mklement0

102

এটি এখনও একটি টেম্প ফাইল ব্যবহার করে তবে কমপক্ষে এটি একটি লাইনে রয়েছে:

echo "text" | cat - yourfile > /tmp/out && mv /tmp/out yourfile

ক্রেডিট: বেস: একটি ফাইলের জন্য একটি পাঠ্য / লাইন প্রস্তুত করুন


4
-এরপরে কি করছে cat?
মকবোল

কোনও নতুন লাইন ছাড়া "পাঠ্য" যুক্ত করার কোনও উপায় আছে কি?
চিশকু

@ চিশাকুecho -n "text"
স্পারহক

3
একটি সতর্কতা: যদি yourfileএকটি সিমিলিংক হয় তবে এটি যা চায় তা করবে না।
শেফার্ড

এর উত্তর কি এর থেকে আলাদা: প্রতিধ্বনি "পাঠ্য"> / টিএমপি / আউট; বিড়াল আপনার ফাইল >> / টিএমপি / আউট; এমভি / টিএমপি / আউট আপনার ফাইল ??
রিচার্ড

31
echo '0a
your text here
.
w' | ed some_file

এড স্ট্যান্ডার্ড এডিটর! http://www.gnu.org/fun/jokes/ed.msg.html


7
বা, পাঠ্যটি হার্ডকোডিংয়ের পরিবর্তে sertedোকাতে হবে:0r header.file
গ্লেন জ্যাকম্যান

যেহেতু প্রশ্নটি একটি echo -e '0a\nyour text here\n.\nw' | ed some_file
ওলাইনারের

20

জন মি: আপনার পদ্ধতিটি কাজের গ্যারান্টিযুক্ত নয়, এবং যদি আপনি 4096 বাইটের বেশি স্টাফ কিনে নেন তবে ব্যর্থ হবেন (কমপক্ষে এটি জিএনও অ্যাজকের সাথে ঘটেছিল তবে আমি মনে করি অন্যান্য বাস্তবায়নের ক্ষেত্রেও একই রকম প্রতিবন্ধকতা থাকবে)। এটি কেবল এটি ক্ষেত্রে ব্যর্থ হবে না, তবে এটি একটি অন্তহীন লুপে প্রবেশ করবে যেখানে এটি তার নিজস্ব আউটপুট পড়বে, যার ফলে সমস্ত উপলব্ধ স্থান পূরণ না হওয়া অবধি ফাইলটিকে বাড়ানো হবে।

এটি নিজের জন্য চেষ্টা করুন:

exec 3<>myfile && awk 'BEGIN{for(i=1;i<=1100;i++)print i}{print}' myfile >&3

(সতর্কতা: কিছুক্ষণ পরে এটি হত্যা করুন বা এটি ফাইল সিস্টেমটি পূরণ করবে)

তদুপরি, ফাইলগুলি সেভাবে সম্পাদনা করা খুব বিপজ্জনক, এবং এটি খুব খারাপ পরামর্শ, যেমন ফাইলটি সম্পাদনা করার সময় কিছু ঘটেছিল (ক্র্যাশ, ডিস্ক পূর্ণ) আপনি প্রায় অসন্তুষ্ট অবস্থায় ফাইলটি রেখে যাবেন বলে গ্যারান্টিযুক্ত।


6
এটি সম্ভবত একটি মন্তব্য হওয়া উচিত, পৃথক উত্তর নয়।
lkraav

10
@ ইকরাভ: সম্ভবত, তবে "মন্তব্য "টি খুব দীর্ঘ এবং বিস্তৃত (এবং দরকারী), এটি দেখতে ভাল লাগবে না এবং সম্ভবত স্ট্যাকওভারফ্লোয়ের সীমিত মন্তব্যের ক্ষমতার সাথে খাপ খায় না।
হেন্ডি ইরাওয়ান

18

একটি টেম্প ফাইল ছাড়া সম্ভব নয়, তবে এখানে অনলাইনার চলে

{ echo foo; cat oldfile; } > newfile && mv newfile oldfile

অস্থায়ী ফাইল ছাড়াই আপনি এড বা পার্লের মতো অন্যান্য সরঞ্জাম ব্যবহার করতে পারেন।


16

এটি লক্ষণীয় যে আপনি প্রায়শই এমকেটেম্পের মতো একটি ইউটিলিটি ব্যবহার করে অস্থায়ী ফাইলটি নিরাপদে তৈরি করা ভাল ধারণা , কমপক্ষে স্ক্রিপ্টটি যদি রুট সুবিধার সাথে কার্যকর করা হয়। উদাহরণস্বরূপ আপনি নিম্নলিখিতগুলি করতে পারেন (আবার ব্যাশে):

(tmpfile=`mktemp` && { echo "prepended text" | cat - yourfile > $tmpfile && mv $tmpfile yourfile; } )

15

আপনার নিয়ন্ত্রণ করা কম্পিউটারগুলিতে আপনার যদি এটির প্রয়োজন হয় তবে "মুর্টিলস" প্যাকেজটি ইনস্টল করুন এবং "স্পঞ্জ" ব্যবহার করুন। তারপরে আপনি এটি করতে পারেন:

cat header myfile | sponge myfile

@ ভিঙ্কো ভার্সালভিকের উত্তরের সাথে একত্রিত হয়ে এটি আমার পক্ষে খুব সুন্দরভাবে কাজ করেছে:{ echo "prepended text"; cat myfile } | sponge myfile
জেসি হ্যালেট

13

বাশ হেরডোক ব্যবহার করে আপনি একটি টিএমপি ফাইলের প্রয়োজনীয়তা এড়াতে পারেন:

cat <<-EOF > myfile
  $(echo this is prepended)
  $(cat myfile)
EOF

এটি কাজ করে কারণ red (বিড়াল মাইফাইল) যখন ব্যাশ স্ক্রিপ্ট মূল্যায়ন করা হয়, পুনর্নির্দেশ সহ বিড়ালটি কার্যকর করার আগে evalu


9

ধরে নিচ্ছি যে আপনি যে ফাইলটি সম্পাদনা করতে চান তা আমার টেক্সট

$cat my.txt    
this is the regular file

এবং আপনি যে ফাইলটি প্রিপেন্ড করতে চান সেটি হ'ল হেডার

$ cat header
this is the header

হেডার ফাইলটিতে একটি চূড়ান্ত ফাঁকা রেখা আছে তা নিশ্চিত হয়ে নিন।
এখন আপনি এটি দিয়ে প্রেন্ডিং করতে পারেন

$cat header <(cat my.txt) > my.txt

আপনি শেষ

$ cat my.txt
this is the header
this is the regular file

আমি যতদূর জানি এটি কেবল 'বাশ' এ কাজ করে।


কেন এই কাজ করে? বন্ধনীগুলি কি মাঝের বিড়ালটিকে একটি পৃথক শেলের মধ্যে চালিত করে এবং পুরো ফাইলটি একবারে ডাম্প করার কারণ করে?
ক্যাটস্কুল

আমি মনে করি <(বিড়াল মাই টেক্সট) ফাইল সিস্টেমের কোথাও একটি অস্থায়ী ফাইল তৈরি করে। মূল ফাইলটি সংশোধন করার আগে এই ফাইলটি পড়া হয়।
সিবি 0

কেউ একবার আমাকে দেখিয়েছিলেন আপনি "<()" সিনট্যাক্স দিয়ে কী করতে পারেন। তবে আমি কখনই শিখেছি না যে এই মিথোডটিকে কীভাবে বলা হয় বা বাশ ম্যানপেজে আমি কিছু খুঁজে পাই না। কেউ যদি এ সম্পর্কে আরও জানেন তবে দয়া করে আমাকে জানান।
সিবি 0

1
আমার পক্ষে কাজ করেনি। কেন জানি না। আমি জিএনইউ ব্যাশ, সংস্করণ 3.2.57 (1) -রিলেজ (x86_64-আপেল-ডারউইন 14) ব্যবহার করছি, আমি ওএস এক্স ইয়োসেমাইটে আছি। আমি আমার this is the headerটেক্সটে দুটি লাইন দিয়ে শেষ করেছি। এমনকি আমি বাশকে আপডেট করার পরেও আমি 4.3.42(1)-releaseএকই ফল পেয়েছি।
কোহনি রবার্ট

1
বাশ কোনও অস্থায়ী ফাইল তৈরি করে না, এটি একটি ফিফো (পাইপ) তৈরি করে যেখানে প্রসেসের প্রতিস্থাপন ( <(...)) কমান্ডটি লিখেছে, সুতরাং সম্পূর্ণ আপ ফ্রন্টে পড়ার কোনও গ্যারান্টি নেইmy.txt , যা ছাড়া এই কৌশলটি কাজ করবে না।
mklement0

9

আপনি যখন শেল-স্ক্রিপ্টে কঠিন হয়ে ওঠার চেষ্টা শুরু করেন, তখন আমি "যথাযথ" স্ক্রিপ্টিং ভাষায় স্ক্রিপ্টটি পুনরায় লেখার জন্য দৃ strongly় পরামর্শ দেব (পাইথন / পার্ল / রুবি / ইত্যাদি)

কোনও ফাইলের জন্য একটি লাইন প্রিভেন্ডিংয়ের ক্ষেত্রে, পাইপিংয়ের মাধ্যমে এটি করা সম্ভব নয়, আপনি যখন যেমন কিছু করেন cat blah.txt | grep something > blah.txtতবে অজান্তেই ফাইলটি ফাঁকা করে দেয়। spongeআপনি ইনস্টল করতে পারবেন বলে একটি ছোট্ট ইউটিলিটি কমান্ড রয়েছে (আপনি এটি করেন cat blah.txt | grep something | sponge blah.txtএবং এটি ফাইলের বিষয়বস্তুগুলিকে বাফার করে, তারপরে এটি ফাইলটিতে লিখে দেয়)। এটি একটি টেম্পল ফাইলের মতো তবে আপনার তা স্পষ্টভাবে করতে হবে না। তবে আমি বলব এটি পার্লের চেয়ে "খারাপ" প্রয়োজনীয়তা।

এটি awk, বা অনুরূপ মাধ্যমে করার একটি উপায় থাকতে পারে তবে আপনি যদি শেল-স্ক্রিপ্ট ব্যবহার করতে চান তবে আমার মনে হয় একটি টেম্প ফাইলটি সবচেয়ে সহজ (/ কেবল?) উপায় ..


7

ড্যানিয়েল ভেলকভের পরামর্শ মতো, টি ব্যবহার করুন।
আমার কাছে, এটি সহজ স্মার্ট সমাধান:

{ echo foo; cat bar; } | tee bar > /dev/null

7

সম্পাদনা: এটি ভেঙে গেছে। বিড়াল এবং টি সহ কোনও ফাইলের প্রিন্ট করার সময় অদ্ভুত আচরণ দেখুন

ওভাররাইট সমস্যাটির সমাধানটি ব্যবহার করছে tee:

cat header main | tee main > /dev/null

কিছুক্ষণের জন্য হাঙ্গা। "টি: মূল: ডিভাইসে কোনও স্থান অবশিষ্ট নেই" দিয়ে শেষ হয়েছে। মূলটি বেশ কয়েকটি জিবি ছিল, যদিও দুটি মূল টেক্সট ফাইল কেবল কয়েক কেবি ছিল।
মার্কোস

3
আপনার পোস্ট করা সমাধানটি যদি ভাঙা হয় (এবং প্রকৃতপক্ষে ব্যবহারকারীদের হার্ডড্রাইভগুলি পূরণ করে), সম্প্রদায়টিকে অনুগ্রহ করে আপনার উত্তরটি মুছুন।
আইয়ুব

1
আপনি কি আমাকে এমন গাইডলাইন নির্দেশ করতে পারেন যা বলছে যে ভুল উত্তরগুলি মুছে ফেলা উচিত?
ড্যানিয়েল ভেলকভ

3

আমি যেটি ব্যবহার করি। এটি আপনাকে অর্ডার, অতিরিক্ত অক্ষর ইত্যাদি আপনার পছন্দ মতো পদ্ধতিতে নির্দিষ্ট করার অনুমতি দেয়:

echo -e "TEXTFIRSt\n$(< header)\n$(< my.txt)" > my.txt

পিএস: কেবলমাত্র এটি কাজ করছে না যদি ফাইলগুলিতে ব্যাকস্ল্যাশযুক্ত পাঠ্য থাকে, কারণ এটি এড়িয়ে যাওয়ার অক্ষর হিসাবে ব্যাখ্যা করা হয়


3

বেশিরভাগ মজা / শেল গল্ফ জন্য, কিন্তু

ex -c '0r myheader|x' myfile

কৌশলটি করবে এবং কোনও পাইপলাইন বা পুনঃনির্দেশ নেই। অবশ্যই, vi / প্রাক্তন সত্যই নিরবচ্ছিন্ন ব্যবহারের জন্য নয়, তাই vi সংক্ষেপে ফ্ল্যাশ করবে।


আমার দৃষ্টিকোণ থেকে সেরা রেসিপি এটি একটি আগত কমান্ড ব্যবহার করে এবং এটি সহজ সরল উপায়ে করে।
দিয়েগো

2

কেন কেবল এড কমান্ডটি ব্যবহার করবেন না (যেমনটি ইতিমধ্যে এখানে ফুঁপানো দ্বারা প্রস্তাবিত)?

এড পুরো ফাইলটি মেমরিতে পড়ে এবং স্বয়ংক্রিয়ভাবে একটি স্থান-স্থান ফাইল সম্পাদনা করে!

সুতরাং, যদি আপনার ফাইলটি বিশাল না হয় ...

# cf. "Editing files with the ed text editor from scripts.",
# http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed

prepend() {
   printf '%s\n' H 1i "${1}" . wq | ed -s "${2}"
}

echo 'Hello, world!' > myfile
prepend 'line to prepend' myfile

তবুও অন্য কাজটি হ'ল খোলা ফাইল হ্যান্ডলগুলি ব্যবহার করা হবে যেমন জর্জেন হিটজেল প্রস্তাবিত সেডের সি / সি / ডি / 'মাইফাইলে মাইফাইলে থেকে পুনঃনির্দেশ আউটপুটটিতে

echo cat > manipulate.txt
exec 3<manipulate.txt
# Prevent open file from being truncated:
rm manipulate.txt
sed 's/cat/dog/' <&3 > manipulate.txt

এই সব অবশ্যই একটি এক লাইনে রাখা যেতে পারে।


2

স্থির পাঠ্যটি পুনরায় চাপানোর জন্য "কোনও টেম্প ফাইল নয়" এর জন্য সিবি 0 এর সমাধানে একটি বৈকল্পিক:

echo "text to prepend" | cat - file_to_be_modified | ( cat > file_to_be_modified ) 

আবার এটি উপ-শেল প্রয়োগের উপর নির্ভর করে - (..) - বিড়ালটিকে ইনপুট এবং আউটপুট জন্য একই ফাইল রাখতে অস্বীকার করে।

দ্রষ্টব্য: এই সমাধানটি পছন্দ করেছেন। যাইহোক, আমার ম্যাকের মূল ফাইলটি হারিয়ে গেছে (ভেবেছিল এটি করা উচিত নয় তবে এটি হয়)। এটি আপনার সমাধান হিসাবে লিখে সমাধান করা যেতে পারে: প্রতিধ্বনি "প্রিপেন্ড করতে পাঠ্য" | বিড়াল - file_to_be_ Modified | বিড়াল> tmp_file; mv tmp_file file_to_be_ Modified


1
আমিও মূল ফাইলটি হারিয়ে ফেলেছি। উবুন্টু লুসিড।
হেজেহগ



2

সতর্কতা: অপির প্রয়োজন মেটাতে এর জন্য আরও কিছুটা কাজ করা দরকার।

@ শিক্সিলুন তার কুফলগুলি সত্ত্বেও কাজ করে সেড অ্যাপ্রোচ করার উপায় আছে। একটি বিকল্প পংক্তিতে কোনও ফাইল পড়ার সময় অবশ্যই সাদা স্থান থেকে বাঁচতে একটি বাশ কমান্ড থাকতে হবে (যেমন '\ n' দিয়ে নিউলাইন চরিত্রগুলি প্রতিস্থাপন করুন ll শেল কমান্ডগুলি visএবং catঅ-মুদ্রণযোগ্য অক্ষরগুলির সাথে ডিল করতে পারে তবে হোয়াইটস্পেস নয়, সুতরাং এটি অপের সমাধান করবে না সমস্যা:

sed -i -e "1s/^/$(cat file_with_header.txt)/" file_to_be_prepended.txt

বিকল্প স্ক্রিপ্টে কাঁচা নিউলাইনগুলির কারণে ব্যর্থ হয়, যা একটি লাইন ধারাবাহিকতা অক্ষর () দিয়ে চালিত করা প্রয়োজন এবং সম্ভবত একটি & এর পরে, শেল এবং সুখী রাখতে, এই এসও উত্তরের মত

sed অ-বৈশ্বিক অনুসন্ধান-প্রতিস্থাপন কমান্ডগুলির জন্য 40K এর আকারের সীমা রয়েছে (প্যাটার্নের পরে কোনও পিছনে / ছ নয়) সুতরাং বেনামে সতর্ক হওয়া সতর্কতার মতো ভীতিজনক বাফার ওভাররন সমস্যাগুলি এড়াতে পারে।



2

সঙ্গে $ (কমান্ড) আপনি একটি পরিবর্তনশীল মধ্যে একটি কমান্ডের আউটপুট লিখতে পারেন। সুতরাং আমি এটি একটি লাইনে তিনটি কমান্ডে করেছি এবং কোনও টেম্প ফাইল নেই।

originalContent=$(cat targetfile) && echo "text to prepend" > targetfile && echo "$originalContent" >> targetfile

1

আপনার কাছে যদি একটি বড় ফাইল (আমার ক্ষেত্রে কয়েকশো কিলোবাইট) এবং অজগর অ্যাক্সেস থাকে তবে এটি catপাইপের সমাধানগুলির চেয়ে অনেক দ্রুত :

python -c 'f = "filename"; t = open(f).read(); open(f, "w").write("text to prepend " + t)'


1

এর সাথে একটি সমাধান printf:

new_line='the line you want to add'
target_file='/file you/want to/write to'

printf "%s\n$(cat ${target_file})" "${new_line}" > "${target_file}"

আপনি এছাড়াও করতে পারেন:

printf "${new_line}\n$(cat ${target_file})" > "${target_file}"

তবে সেই ক্ষেত্রে আপনার অবশ্যই নিশ্চিত হতে হবে যে %লক্ষ্য ফাইলের বিষয়বস্তু সহ কোনও কোথাও নেই, কারণ এটি ব্যাখ্যা করতে পারে এবং আপনার ফলাফলগুলি স্ক্রু করতে পারে।


2
এটি আপনার লক্ষ্য ফাইলটিতে এমন কিছু আছে যা প্রিন্টফ একটি বিন্যাসকরণ বিকল্প হিসাবে ব্যাখ্যা করে তবে এটি ফুটে উঠবে (এবং আপনার ফাইলটি কেটে ফেলবে!) Seems
অ্যালান এইচ।

echoএকটি নিরাপদ বিকল্প মত মনে হচ্ছে। echo "my new line\n$(cat my/file.txt)" > my/file.txt
অ্যালান এইচ।

@AlanH। আমি উত্তরে বিপদগুলি সম্পর্কে সতর্ক করে দিই।
ব্যবহারকারী 137369

আসলে, আপনি কেবল ${new_line}লক্ষ্য ফাইলটি নয়, প্রবেশাধিকার সম্পর্কে সতর্ক করেছিলেন
অ্যালান এইচ।

আপনি আরও স্পষ্ট হতে পারে? এটি সত্যিই একটি বড় আইএমও। "কোথাও" এটি খুব স্পষ্ট করে না।
অ্যালান এইচ।

1

আপনি পার্ল কমান্ড লাইন ব্যবহার করতে পারেন:

perl -i -0777 -pe 's/^/my_header/' tmp

যেখানে -i ফাইলটির একটি ইনলাইন প্রতিস্থাপন তৈরি করবে এবং -0777 পুরো ফাইলটি স্লার্প করবে এবং কেবল ম্যাচটি শুরু করবে। -pe সমস্ত লাইন মুদ্রণ করবে

অথবা যদি my_header ফাইল হয়:

perl -i -0777 -pe 's/^/`cat my_header`/e' tmp

যেখানে / ই বিকল্পের ক্ষেত্রে কোড বিলোপের অনুমতি দেবে।


0
current=`cat my_file` && echo 'my_string' > my_file && echo $current >> my_file

যেখানে "my_file" ফাইলটি "my_string" এ প্রিপেন্ড করতে হবে।


0

আমি @ ফ্লফলের এড পদ্ধতির পছন্দ করছি । সর্বোপরি, যে কোনও সরঞ্জামের কমান্ড লাইন স্যুইচ বনাম স্ক্রিপ্টযুক্ত সম্পাদক কমান্ডগুলি মূলত এখানে একই জিনিস; কোনও স্ক্রিপ্টযুক্ত সম্পাদক সমাধান "পরিষ্কারতা" কোনও কম বা কী নন তা দেখছেন না।

বার্তাটি দেওয়ার .git/hooks/prepare-commit-msgজন্য একটি ইন-রেপো .gitmessageফাইলটি পুনরায় সংশোধন করতে আমার ওয়ান-লাইনার যুক্ত হয়েছে :

echo -e "1r $PWD/.gitmessage\n.\nw" | ed -s "$1"

উদাহরণ .gitmessage:

# Commit message formatting samples:
#       runlevels: boot +consolekit -zfs-fuse
#

আমি এর 1rপরিবর্তে করছি 0r, কারণ এটি মূল টেমপ্লেট থেকে খালি রেডি-তে-লেখার ফাইলটি ফাইলের উপরে ছেড়ে যাবে। .gitmessageতারপরে খালি লাইন রাখবেন না , আপনি দুটি খালি লাইন দিয়ে শেষ করবেন। -sএডের ডায়গনিস্টিক তথ্য আউটপুট দমন করে।

এটির সাথে যাওয়ার প্রসঙ্গে আমি আবিষ্কার করেছি যে ভিম-বাফের জন্য এটি থাকাও ভাল:

[core]
        editor = vim -c ':normal gg'

0

ভেরিয়েবল, এফটিডব্লিউ?

NEWFILE=$(echo deb http://mirror.csesoc.unsw.edu.au/ubuntu/ $(lsb_release -cs) main universe restricted multiverse && cat /etc/apt/sources.list)
echo "$NEWFILE" | sudo tee /etc/apt/sources.list

0

আমি মনে করি এটি এডের সবচেয়ে পরিষ্কার প্রকরণ:

cat myheader | { echo '0a'; cat ; echo -e ".\nw";} | ed myfile

একটি ফাংশন হিসাবে:

function prepend() { { echo '0a'; cat ; echo -e ".\nw";} | ed $1; }

cat myheader | prepend myfile

0

আপনি যদি BASH এ স্ক্রিপ্ট করছেন, আসলে, আপনি কেবল জারি করতে পারেন:

বিড়াল - yourfile / tmp / আউট এবং & এমভি / tmp / আউট আপনার ফাইল

এটি আসলে আপনার নিজের প্রশ্নে পোস্ট করা জটিল উদাহরণে।


একজন সম্পাদক এটিকে পরিবর্তিত করার পরামর্শ দিয়েছিলেন cat - yourfile <<<"text" > /tmp/out && mv /tmp/out yourfile, তবে এটি আমার উত্তর থেকে যথেষ্ট পৃথক যে এটি নিজের উত্তর হওয়া উচিত।
টিম কেনেডি

0

এই প্রোগ্রামটিতে কোন শেল সমাধান (এবং কখনও এক হতে হবে) যে ধারাবাহিকভাবে এবং নির্ভরযোগ্যভাবে যাই হোক না কেন দুই ফাইলের মাপ কাজ করবে myheaderএবং myfile। কারণটি হ'ল যদি আপনি এটি করতে চান তবে অস্থায়ী ফাইলটিতে পুনরাবৃত্তি না করে (এবং শেলটি নিঃশব্দে কোনও অস্থায়ী ফাইলটিতে পুনরায় না ঘটাতে দেওয়া হয়, যেমন: নির্মাণের মাধ্যমে exec 3<>myfile, পাইপিং করা teeইত্যাদি) to

আপনি যে "আসল" সমাধানটির সন্ধান করছেন তা ফাইল সিস্টেমের সাথে ঝাঁকুনির জন্য প্রয়োজন, এবং তাই এটি ইউজারস্পেসে উপলভ্য নয় এবং এটি প্ল্যাটফর্ম নির্ভর dependent নির্ভরতা: আপনি ফাইল সিস্টেমের পয়েন্টারের myfileবর্তমান মান অনুসারে ফাইল সিস্টেম পয়েন্টারটি পরিবর্তন করতে বলছেন জন্য myheaderএবং ফাইলসিস্টেম প্রতিস্থাপন EOFএর myheaderবর্তমান ফাইলসিস্টেম ঠিকানায় একটি শৃঙ্খলিত লিঙ্ক সহ দ্বারা ইশারাmyfile । এটি তুচ্ছ নয় এবং স্পষ্টতই কোনও অ-সুপারইউজার ব্যবহারকারীর দ্বারা করা সম্ভব নয় এবং সম্ভবত সুপারভাইজারের দ্বারাও হয় না ... আইওনড সহ খেলুন ইত্যাদি

যদিও আপনি লুপ ডিভাইসগুলি ব্যবহার করে এটি কমবেশি জাল করতে পারেন। উদাহরণস্বরূপ দেখুন এই তাই থ্রেড

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