যেহেতু এই প্রশ্নটি অনুসন্ধান ইঞ্জিনগুলির শীর্ষ ফলাফল, এখানে https://serverfault.com/a/547331 এর উপর ভিত্তি করে একটি ওয়ান-লাইনার রয়েছে sponge
যা পরিবর্তে একটি সাব-শেল ব্যবহার করে (যা প্রায়শই ওএস এক্সের মতো ভ্যানিলা ইনস্টলের অংশ হয় না) :
echo "$(grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name)" > file_name
সাধারণ কেসটি হ'ল:
echo "$(cat file_name)" > file_name
সম্পাদনা করুন, উপরের সমাধানটিতে কিছু সতর্কতা রয়েছে:
printf '%s' <string>
পরিবর্তে echo <string>
এমনটি ব্যবহার করা উচিত যাতে এতে থাকা ফাইলগুলি -n
অনাকাঙ্ক্ষিত আচরণের কারণ না ঘটে ।
- কমান্ড প্রতিকল্পন রেখাচিত্রমালা নতুন লাইন trailing ( এই ব্যাশ মত শাঁস একটি বাগ / বৈশিষ্ট্য ) তাই আমরা মত একটি পোস্টসাফিক্স চরিত্র সংযোজন করা উচিত
x
আউটপুট এবং মাধ্যমে বাইরে এটি অপসারণ একটি অস্থায়ী ভেরিয়েবলের প্যারামিটার সম্প্রসারণ মত ${v%x}
।
- একটি অস্থায়ী পরিবর্তনশীল ব্যবহার করে বর্তমান শেল পরিবেশে যে
$v
কোনও বিদ্যমান ভেরিয়েবলের মান স্টম্পস করে $v
, তাই পূর্ববর্তী মানটি সংরক্ষণ করার জন্য আমাদের সমগ্র অভিব্যক্তিটিকে বন্ধনীতে বাসাতে হবে।
- বাশের মতো শেলের আরও একটি বাগ / বৈশিষ্ট্য হ'ল কমান্ড প্রতিস্থাপনটি
null
আউটপুট থেকে অরক্ষিত অক্ষরগুলি সরিয়ে দেয়। আমি dd if=/dev/zero bs=1 count=1 >> file_name
এটি কল করে এবং এটিকে হেক্স সহ দেখে যাচাই করেছি cat file_name | xxd -p
। তবে echo $(cat file_name) | xxd -p
ছিনতাই হয়। তাই এই উত্তর দিতে হবে না , বাইনারি ফাইল বা অমুদ্রণীয় অক্ষর ব্যবহার করে কিছু ব্যবহার করা যেমন লিঞ্চ নির্দিষ্ট ।
সাধারণ সমাধান (অ্যালবাইট কিছুটা ধীরে ধীরে, আরও মেমরি নিবিড় এবং এখনও ছাপানো অক্ষর ছাড়াই):
(v=$(cat file_name; printf x); printf '%s' ${v%x} > file_name)
Https://askubuntu.com/a/752451 থেকে পরীক্ষা :
printf "hello\nworld\n" > file_uniquely_named.txt && for ((i=0; i<1000; i++)); do (v=$(cat file_uniquely_named.txt; printf x); printf '%s' ${v%x} > file_uniquely_named.txt); done; cat file_uniquely_named.txt; rm file_uniquely_named.txt
মুদ্রণ করা উচিত:
hello
world
যদিও cat file_uniquely_named.txt > file_uniquely_named.txt
বর্তমান শেলটিতে কল করা :
printf "hello\nworld\n" > file_uniquely_named.txt && for ((i=0; i<1000; i++)); do cat file_uniquely_named.txt > file_uniquely_named.txt; done; cat file_uniquely_named.txt; rm file_uniquely_named.txt
একটি খালি স্ট্রিং মুদ্রণ করে।
আমি বড় ফাইলগুলিতে এটি পরীক্ষা করিনি (সম্ভবত 2 বা 4 গিগাবাইটের বেশি)।
এই উত্তরটি আমি হার্ট সিমহা এবং কোস-এর কাছ থেকে নিয়েছি ।