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


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থেকেও একবার দেখুন moreutilsspongeস্ট্যান্ডার্ড ইনপুট থেকে ডেটা ভিজিয়ে রাখা অবধি স্ট্যান্ডার্ড ইনপুটটির লেখার শেষ কোনও ফাইলটিতে লেখার আগে বন্ধ হয়ে যায়। এটি এর মতো ব্যবহৃত হয়:

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.