উত্তর:
ফাইল কমান্ডের পরে 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.txt
tail -n +2 d.txt > tmp.txt
sed -i '1d' d.txt
লক্ষ্য করুন যে লক্ষ্যটি d.txt
5.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
।