কোনও ফাইলের প্রথম লাইন মুছুন


110

আমি কীভাবে কোনও ফাইলের প্রথম লাইনটি মুছতে এবং পরিবর্তনগুলি রাখতে পারি?

আমি এটি চেষ্টা করেছিলাম কিন্তু এটি ফাইলের সম্পূর্ণ সামগ্রী মুছে ফেলে।

$sed 1d file.txt > file.txt

উত্তর:


81

ফাইল কমান্ডের পরে 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

2
বিএসডি সহ sed, আপনি ব্যবহার করতে পারেন sed -i .bak '1d' file.txt।

1
টেম্প ফাইল অন্তর্ভুক্ত না এমন কোনও উপায় আছে? যাইহোক, এটি কৌশলটি করবে। অনেক ধন্যবাদ!
— kickass13

@ kickass13 সম্ভবত যেমন একটি পাঠ্য সম্পাদক ব্যবহার করে ed।
— জর্ডানম

6
edকমান্ড হবে: printf "%s\n" 1d w q | ed file.txt(আমি হৃদয় ইডি)
— গ্লেন জ্যাকম্যান

1
@ জোনারেয়েস-exec sed -i '1d' {} \;
— জর্দান 2 ই

141

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

# -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

পার্শ্ব প্রতিক্রিয়া এড়াতে।


আমি এটি আমার ফেডোরা সিস্টেমে চেষ্টা করেছি এবং আউটপুট উপরে। আপনি সঠিক - এটি নির্দেশ করার জন্য ধন্যবাদ।
— AsymLabs

tailকৌতুক আমার জন্য কাজ (ক 130mb ফাইলে কম 3 সেকেন্ড লেগেছে)। ধন্যবাদ!
— elo80ka

echo "$(tail -n +2 file.txt)" > file.txtসঠিক উত্তর।
— অ্যালেক্স রাজ কালীমূর্তি

ধন্যবাদ! প্রতিধ্বনি "$ (লেজু -2 + file.txt)"> file.txt আমার জন্য ঠিক একটি কবিতার মতো কাজ করে!
— আরসেনিই

16

এ spongeথেকেও একবার দেখুন moreutils। spongeস্ট্যান্ডার্ড ইনপুট থেকে ডেটা ভিজিয়ে রাখা অবধি স্ট্যান্ডার্ড ইনপুটটির লেখার শেষ কোনও ফাইলটিতে লেখার আগে বন্ধ হয়ে যায়। এটি এর মতো ব্যবহৃত হয়:

sed '1d' file.txt | sponge file.txt

14

এই বিষয়টি আগ্রহজনক, সুতরাং আমি তিনটি উপায়ে মানদণ্ড পরীক্ষা করি:

  1. sed '1d' d.txt > tmp.txt
  2. tail -n +2 d.txt > tmp.txt
  3. sed -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দ্রুততম ছিল।
— সোপালাজো ডি অ্যারিরেজ

9

exসত্যিকারের জায়গাটিতে সম্পাদনার জন্য ব্যবহার করা যেতে পারে যা কোনও টেম্প ফাইল যুক্ত করে না

ex -c ':1d' -c ':wq' file.txt

2
প্রাক্তন একটি টেম্প ফাইল ব্যবহার করে। strace -e open ex -c ':1d' -c ':wq' foo। প্রাক্তনটি টেম্প ফাইলের সাহায্যে মূল ফাইলটি কেটে দেয়, যেখানে জিএনইউ সেড -i বিকল্পটি টেম্প ফাইলের সাহায্যে মূলটিকে ওভাররাইট করে। আমি নিশ্চিত না যে বিএসডির শেড কীভাবে কাজ করে।
— llua

@ লুয়া, আপনি ঠিক বলেছেন। আমি এটিও লক্ষ্য করেছি, তবে পরে
— ইরুভার

3

ব্যবহার করে কোনও ফাইল থেকে প্রথম লাইনটি মুছে ফেলার সবচেয়ে ছোট এবং সহজ উপায় sedহ'ল:

$ sed -i -n -e '2,$p' file.txt

3

আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:

ex -s -c '1d|x' file.txt
  1. 1 প্রথম লাইন সন্ধান করুন

  2. d মুছে ফেলা

  3. x সংরক্ষণ করেন এবং বন্ধ করেন


0

এই কমান্ডটি 1 লাইন সরিয়ে "file.txt" হিসাবে সংরক্ষণ করবে।

sed '1d' file.txt  > /tmp/file.txt && mv /tmp/file.txt file.txt || rm -f /tmp/file.txt

0

ফাইলে একটি প্রাকটিকিলার লাইন মুছতে

  1. প্রথম লাইন মুছুন

সেড '1 ডি' ফাইল

  1. প্রথম এবং তৃতীয় লাইন মুছুন

সেড '1 ডি 3 ডি' ফাইল

লাইনে পাঠক মুছুন

1 লিনে প্রথম দুটি চার্টার মুছুন

সেড 's /^..//' ফাইল

2 শেষ দুটি ক্রেকটার্সিন লাইন মুছুন

সেড এর / .. £ // 'ফাইল

3 ফাঁকা লাইন মুছুন

সেড '/ ^ £ / d' ফাইল


4
ব্রিটিশরা কি উপনিবেশগুলি আবার গ্রহণ করেছিল? £গতবার আমি তাকিয়েছিলাম, ≠ $।
— জি ম্যান



-2

বিড়াল file01 | সেড-ই '1,3 ডি'

// ফাইল01 এ সামগ্রী দেখান তবে প্রথম এবং তৃতীয় লাইনটি সরিয়ে দিন


2
আপনার দেওয়া সেড কমান্ডটি 1, 2 এবং 3 লাইনগুলি সরিয়ে ফেলবে
— আইক্রাস

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