উত্তর:
ফাইল কমান্ডের পরে file.txt ফাঁকা থাকার কারণটি শেলটি কাজ করে। সেই লাইনের সাথে প্রথম যেটি ঘটে তা হ'ল পুনঃনির্দেশ। "File.txt" ফাইলটি খোলে এবং 0 টি বাইটে কাটা হয়। এর পরে সেড কমান্ডটি চালিত হয় তবে পয়েন্টে ফাইলটি ইতিমধ্যে খালি থাকে।
কয়েকটি অপশন রয়েছে, বেশিরভাগটিতে একটি অস্থায়ী ফাইলে লেখা জড়িত।
sed '1d' file.txt > tmpfile; mv tmpfile file.txt # POSIX
sed -i '1d' file.txt # GNU sed only, creates a temporary file
perl -ip -e '$_ = undef if $. == 1' file.txt # also creates a temporary file
ed।
edকমান্ড হবে: printf "%s\n" 1d w q | ed file.txt(আমি হৃদয় ইডি)
-exec sed -i '1d' {} \;
একটি বিকল্প খুব লাইটওয়েট বিকল্প হ'ল প্রথম 'লাইন' ব্যতীত 'লেজ' করা (এটি সাধারণত ফাইলের শিরোনামগুলি সরানোর সহজ উপায় হতে পারে):
# -n +2 : start at line 2 of the file.
tail -n +2 file.txt > file.stdout
ইভান টিটেলম্যানকে অনুসরণ করছেন, আপনি এটি করতে পারেন:
tail -n +2 file.txt | sponge file.txt
একটি অস্থায়ী ফাইল এড়ানোর জন্য। অন্য বিকল্প হতে পারে:
echo "$(tail -n +2 file.txt)" > file.txt
এবং তাই এগিয়ে। শেষটি পরীক্ষা করা:
[user@work ~]$ cat file.txt
line 1
line 2
line 3
line 4
line 5
[user@work ~]$ echo "$(tail -n +2 file.txt)" > file.txt
[user@work ~]$ cat file.txt
line 2
line 3
line 4
line 5
[user@work ~]$
ওফস আমরা একটি নতুন লাইন হারিয়েছি (নীচে @ 1_CR মন্তব্য করে), পরিবর্তে চেষ্টা করুন:
printf "%s\n\n" "$(tail -n +2 file.txt)" > file.txt
[user@work ~]$ cat file.txt
line 1
line 2
line 3
line 4
line 5
[user@work ~]$ printf '%s\n\n' "$(tail -n +2 file.txt)" > file.txt
[user@work ~]$ cat file.txt
line 2
line 3
line 4
line 5
[user@work ~]$
সেডে ফিরে আসার চেষ্টা করুন:
printf '%s\n\n' "$(sed '1d' file.txt)" > file.txt
অথবা সম্ভবত
echo -e "$(sed '1d' file.txt)\n" > file.txt
পার্শ্ব প্রতিক্রিয়া এড়াতে।
tailকৌতুক আমার জন্য কাজ (ক 130mb ফাইলে কম 3 সেকেন্ড লেগেছে)। ধন্যবাদ!
echo "$(tail -n +2 file.txt)" > file.txtসঠিক উত্তর।
এ spongeথেকেও
একবার দেখুন moreutils। spongeস্ট্যান্ডার্ড ইনপুট থেকে ডেটা ভিজিয়ে রাখা অবধি স্ট্যান্ডার্ড ইনপুটটির লেখার শেষ কোনও ফাইলটিতে লেখার আগে বন্ধ হয়ে যায়। এটি এর মতো ব্যবহৃত হয়:
sed '1d' file.txt | sponge file.txt
এই বিষয়টি আগ্রহজনক, সুতরাং আমি তিনটি উপায়ে মানদণ্ড পরীক্ষা করি:
sed '1d' d.txt > tmp.txttail -n +2 d.txt > tmp.txtsed -i '1d' d.txt লক্ষ্য করুন যে লক্ষ্যটি d.txt5.4 জিবি ফাইল
ফলাফল পান:
run 1 : sed '1d' d.txt > r1.txt
14s
run 2 : tail -n +2 d.txt > r2.txt
20s
run 3 : sed -i '1d' d.txt
88s
উপসংহার: নীচে এটি দ্রুততম উপায় বলে মনে হচ্ছে:
sed '1d' file.txt > tmpfile; mv tmpfile file.txt
sed '1d' d.txtপদ্ধতিতে mvকমান্ডটি অন্তর্ভুক্ত করা হয়নি (বা এটি আপনার পরীক্ষাগুলি পড়ে মনে হয়) । 20 এমবি ফাইল সহ ফ্রিবিএসডি-তে আমার পরীক্ষাগুলিতে sed -iদ্রুততম ছিল।
exসত্যিকারের জায়গাটিতে সম্পাদনার জন্য ব্যবহার করা যেতে পারে যা কোনও টেম্প ফাইল যুক্ত করে না
ex -c ':1d' -c ':wq' file.txt
strace -e open ex -c ':1d' -c ':wq' foo। প্রাক্তনটি টেম্প ফাইলের সাহায্যে মূল ফাইলটি কেটে দেয়, যেখানে জিএনইউ সেড -i বিকল্পটি টেম্প ফাইলের সাহায্যে মূলটিকে ওভাররাইট করে। আমি নিশ্চিত না যে বিএসডির শেড কীভাবে কাজ করে।
আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:
ex -s -c '1d|x' file.txt
1 প্রথম লাইন সন্ধান করুন
d মুছে ফেলা
x সংরক্ষণ করেন এবং বন্ধ করেন
ফাইলে একটি প্রাকটিকিলার লাইন মুছতে
সেড '1 ডি' ফাইল
সেড '1 ডি 3 ডি' ফাইল
লাইনে পাঠক মুছুন
1 লিনে প্রথম দুটি চার্টার মুছুন
সেড 's /^..//' ফাইল
2 শেষ দুটি ক্রেকটার্সিন লাইন মুছুন
সেড এর / .. £ // 'ফাইল
3 ফাঁকা লাইন মুছুন
সেড '/ ^ £ / d' ফাইল
£গতবার আমি তাকিয়েছিলাম, ≠ $।
বিড়াল file01 | সেড-ই '1,3 ডি'
// ফাইল01 এ সামগ্রী দেখান তবে প্রথম এবং তৃতীয় লাইনটি সরিয়ে দিন
sed, আপনি ব্যবহার করতে পারেনsed -i .bak '1d' file.txt।