ফাইলটি থেকে শেষ লাইনটি মুছুন


44

আমি sed নির্দিষ্ট অবস্থান হিসাবে দ্রুত লাইনগুলি মুছতে ব্যবহার করি

sed '1d'
sed '5d'

তবে, আমি যদি ফাইলটির শেষ লাইনটি মুছতে চাই এবং লাইনের গণনা জানি না (তবে আমি জানি যে আমি এটি ব্যবহার করতে wcএবং অন্যান্য কৌশলগুলি পেতে পারি )।

বর্তমানে, এটির সাথে একত্রিত করে headএবং এটির সাথে tailমিলিত wc। এখানে কোন দ্রুত টুইস্ট?


কোন ওএস? কিছু স্বাদের জন্য headএবং এর জন্য আকর্ষণীয় বিকল্প রয়েছে tail...
নিলস

@ নীল আমি 'রেড হ্যাট এন্টারপ্রাইজ লিনাক্স সার্ভার 5.5 (টিকঙ্গা) মুক্তি দিচ্ছি। আপনি কি বিকল্পগুলির জন্য নির্দেশ করতে পারেন headএবং tailবিভিন্ন স্বাদ সম্পর্কে জানেন?
mtk

আমি করেছিলাম. নিচে দেখ.
নীল

উত্তর:


87

ইন সেড $শেষ লাইন তাই শেষ লাইনটি মুছতে:

sed '$d' <file>

12
sed -i '$d' <file>জায়গায় ফাইল সম্পাদনা করতে ব্যবহার করুন ।
ওয়ান্ডারিংমাইন্ড

1
সর্বশেষ এন লাইনগুলি মুছে ফেলার জন্য কী হবে, যেখানে এন কোনও সংখ্যার সংখ্যা?
জোশুয়া সালাজার

31

শেষ লাইনের জন্য:

sed '$d' file

9
আপনাকে 30 সেকেন্ডের ব্যবধানে পরাজিত করবে: পি
h3rrmiller

1
দুঃখজনক হলেও যদিও শেষ দুটি লাইনটি মুছতে আরও জটিল কৌশল ব্যবহার করতে হয়েছে।
dubiousjim

আপনি কি বোঝাতে চেয়েছেন? sed '$d' file; sed '$d' file
রব

3
@ রব: sed '$d' fileআসলে ফাইলটি সংশোধন করে না; এটি কেবল ফাইলের বিষয়বস্তু প্রিন্ট করে, সর্বশেষ লাইন বিয়োগ করবে। সুতরাং sed '$d' file; sed '$d' fileফাইলের বিষয়বস্তু দু'বার মুদ্রণ করবে , প্রতিবার শেষ লাইন বিয়োগ করবে। ডিলিট-শেষ দুই লাইনের সমতুল্য sed '$d' fileহয় sed '$d' file | sed '$d'
রুখ 18

2
হ্যাঁ, এটি অবহেলা কিন্তু অবশ্যই এটি কাজ করে। আমি এক পাসে এটি করতে হবে sed -n '1{h;n;}; $q; x; p;'। আমি পাট করছিলাম যে আমরা শুধু করতে পারি না sed '$-1,$d'
dubiousjim

14

cat file.txt | head -n -1 > new_file.txt

সাবধান, মনে হয়, শেষ লাইনের উপর নির্ভর করে file.txt(যদি এটি শেষ হয় EOF, বা \nতারপরে EOF), এই কমান্ডের পরে লাইনগুলির সংখ্যা new_file.txtএকই (যেমন file.txt) হতে পারে (কোনও নেই যখন ঘটে \n) - শেষ লাইনের বিষয়বস্তু মোছা হয়েছে।

এছাড়াও, নোট করুন যে আপনাকে অবশ্যই একটি দ্বিতীয় (মধ্যবর্তী) ফাইল ব্যবহার করতে হবে। আপনি যদি বিড়াল হন এবং একই ফাইলটিতে পুনর্নির্দেশ করেন তবে আপনি এটি মুছবেন।


6
যেখানে এটি কাজ করে, এটি সহজভাবেও হতে পারে head -n -1 file.txt > new_file.txt। মনে রাখবেন যে নেতিবাচক গণনাগুলি head -nকেবল কয়েকটি বাস্তবায়নের জন্য উপলব্ধ head। উদাহরণস্বরূপ, এটি ফ্রিবিএসডি বা বুসিবক্স সংস্করণের জন্য কাজ করে না head
dubiousjim

1
@ দুবাইজিজিম: সম্মত, head -n -1 file.txt > new_file.txtআরও ভাল। এটি আমার দুটি মন্তব্যে (একই সংখ্যক লাইন, এবং একই ফাইলে মুছা) সম্মানের সাথে একইভাবে কাজ করে। নেতিবাচক যুক্তি হিসাবে, ইউনিক্সের মধ্যে সময়ে সময়ে এই ধরনের পার্থক্য দেখা দেয় এবং তারা প্রায়শই হতাশ হন কারণ আপনি এটি পুরোপুরি একই কমান্ড হিসাবে প্রত্যাশা করেন (এবং আপনি কেন - একই নাম এবং উদ্দেশ্য!) - যাইহোক, ভাল বিন্দু। (আমি ডেবিয়ান ব্যবহার করি))
ইমানুয়েল বার্গ

5

head --lines=-1। আমি প্রথম এসইএলএস 11 এসপি 2-সিস্টেমে (কোরিউটিলস -8.12-6.23.1) হেড করার জন্য ম্যান-পেজে এই সম্ভাবনাটি অতিক্রম করেছি bled

tailএবং -rpm headএর অংশ coreutils(কমপক্ষে rpm- ভিত্তিক-সিস্টেমগুলির জন্য)।

কোর্টিলের চেঞ্জলগ অনুসারে, এই সিনট্যাক্সটি কোর্টিলস-সংস্করণ 5.0.1-এর পরে সমর্থিত

খারাপ সংবাদ: আরএইচ 5-ম্যান-পৃষ্ঠা অনুসারে এই বিকল্পটি বর্ণিত নয়

সুসংবাদ: এটি আরএইচ 5 এর সাথে কাজ করে (সুতরাং আপনার ক্ষেত্রে এটি কাজ করে - কমপক্ষে আরএইচ 5 এর বর্তমান সংস্করণ সহ)।

rpm -q coreutils আমাকে দেখায় (CentOS 5.8 এ): কোর্টিলস -5.97-34.el5_8.1

আমি নিশ্চিত না আরএইচ 5.5। ইতিমধ্যে এটির সমর্থনকারী কোর্টিল-সংস্করণ রয়েছে। তবে 5.5 যাইহোক EoLed করেছে।


+1 টি। এটি পুরোপুরি RH5.5 এ কাজ করে। ধন্যবাদ।
mtk

0

লিনাক্স

delete মুছে ফেলার জন্য শেষ লাইন, ডি:

sed '$d' ~/path/to/your/file/name

ম্যাক অপারেটিং সিস্টেম

সেড-এর সমান i

sed -i '' -e '$ d' ~/path/to/your/file/name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.