উত্তর:
আপনি এটি প্রথম দুটি লাইন ফালা ব্যবহার করতে পারেন :
tail -n +3 foo.txt
এবং এটি শেষ দুটি লাইন ফেলা:
head -n -2 foo.txt
(ধরে নিচ্ছি ফাইলটি শেষের সাথে \nশেষ হবে)
ঠিক যেমন স্ট্যান্ডার্ড ব্যবহারের জন্য tailএবং headএই ক্রিয়াকলাপগুলি ধ্বংসাত্মক নয়। >out.txtআপনি যদি কোনও নতুন ফাইলে আউটপুট পুনর্নির্দেশ করতে চান তবে ব্যবহার করুন:
tail -n +3 foo.txt >out.txt
ক্ষেত্রে out.txtইতিমধ্যে বিদ্যমান, এটি এই ফাইলটি ওভাররাইট করবে। এর >>out.txtপরিবর্তে >out.txtযদি আপনি আউটপুট যুক্ত করে থাকেন তবে ব্যবহার করুন out.txt।
head -n -2নয় সামঞ্জস্যপূর্ণ POSIX ।
আপনি যদি প্রথম এন -1 লাইন বাদে সমস্ত চান তবে লাইনের tailসংখ্যা দিয়ে কল করুন +N। (সংখ্যাটি আপনি প্রথম রেখার সংখ্যাটি ধরে রাখতে চান, 1 থেকে শুরু করে, অর্থাৎ +1 এর অর্থ শীর্ষে শুরু করা, +2 এর অর্থ একটি লাইন এড়িয়ে যাওয়া ইত্যাদি)।
tail -n +3 foo.txt >>other-document
শেষ এন লাইনগুলি এড়িয়ে যাওয়ার কোনও সহজ, পোর্টেবল উপায় নেই। GNU এর প্রতিপক্ষ হিসাবে headঅনুমতি দেয় । অন্যথায়, আপনার যদি (যেমন GNU বা ব্যাসিবক্স) থাকে তবে আপনি এটি লেজের সাথে একত্রিত করতে পারেন:head -n +Ntail -n +Ntac
tac | tail -n +3 | tac
বহনযোগ্যভাবে, আপনি একটি এডকে ফিল্টার ব্যবহার করতে পারেন (অনির্ধারিত):
awk -vskip=2 '{
lines[NR] = $0;
if (NR > skip) print lines[NR-skip];
delete lines[NR-skip];
}'
আপনি যদি কোনও বৃহত ফাইল থেকে শেষ কয়েকটি লাইন সরিয়ে নিতে চান, আপনি কাটতে টুকরাটির বাইট অফসেট নির্ধারণ করতে পারেন তারপরে কাটা কাটাটি সম্পাদন করুন dd।
total=$(wc -c < /file/to/truncate)
chop=$(tail -n 42 /file/to/truncate | wc -c)
dd if=/dev/null of=/file/to/truncate seek=1 bs="$((total-chop))"
আপনি শুরুতে কোনও ফাইল ছাঁটাই করতে পারবেন না, যদিও আপনাকে যদি বিশাল ফাইলের প্রথম কয়েকটি লাইন অপসারণ করতে হয় তবে আপনি সামগ্রীগুলি চারপাশে সরাতে পারেন ।
থেকে tailমানুষ পৃষ্ঠা (গনুহ tail, যে হয়):
-n, --lines=K
output the last K lines, instead of the last 10; or use -n +K to
output lines starting with the Kth
সুতরাং, নিম্নলিখিত সব কিন্তু প্রথম 2 লাইন যোগ করা উচিত somefile.txtকরতে anotherfile.txt:
tail --lines=+3 somefile.txt >> anotherfile.txt
প্রথম এন লাইনগুলি সরাতে GNU সেড ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ যদি এন = 2
sed -n '1,2!p' input-file
!গড় "এই ব্যবধান অগ্রাহ্য"। যেমন আপনি কল্পনা করতে পারেন, আরও জটিল ফলাফল পাওয়া যেতে পারে, উদাহরণস্বরূপ
sed -n '3,5p;7p'
এটি 3,4,5,7 লাইনে প্রদর্শিত হবে। ঠিকানার পরিবর্তে নিয়মিত প্রকাশের ব্যবহার থেকে আরও শক্তি আসে।
সীমাবদ্ধতাটি হ'ল লাইন সংখ্যাগুলি আগে থেকেই জানা উচিত।
sed 1,2d? সরল সাধারণত ভাল হয়। এছাড়াও, আপনার উদাহরণগুলির কোনও কিছুই জিএনইউ শেডের সাথে নির্দিষ্ট নয়; আপনার কমান্ডগুলি সমস্ত শেডের স্ট্যান্ডার্ড POSIX বৈশিষ্ট্য ব্যবহার করে ।
tail -n +4চতুর্থ লাইনে শুরু হওয়া ফাইলটি আউটপুট দেওয়ার সময় (প্রথম 3 লাইন ব্যতীত সমস্ত) স্ট্যান্ডার্ড এবং পোর্টেবল, এর headসম-অংশ ( head -n -3শেষ 3 লাইন ব্যতীত) নয়।
বহনযোগ্যভাবে, আপনি কি:
sed '$d' | sed '$d' | sed '$d'
বা:
sed -ne :1 -e '1,3{N;b1' -e '}' -e 'P;N;D'
(সাবধান যে কয়েকটি সিস্টেমে যেখানে sedসীমিত আকারের প্যাটার্ন স্পেস রয়েছে, এটি বৃহত্তর মানগুলিতে স্কেল করে না n)।
বা:
awk 'NR>3 {print l[NR%3]}; {l[NR%3]=$0}'
আশা করি আমি আপনার প্রয়োজনীয়তা পরিষ্কারভাবে বুঝতে পেরেছি।
আপনার অনুরোধটি সম্পূর্ণ করার বিভিন্ন উপায় রয়েছে:
tail -n$(expr $(cat /etc/passwd|wc -l) - 2) /etc/passwd
যেখানে / ইত্যাদি / পাসডাব্লুড আপনার ফাইল
আপনার কাছে বিশাল ফাইল থাকলে দ্বিতীয় সমাধানটি কার্যকর হতে পারে:
my1stline=$(head -n1 /etc/passwd)
my2ndline=$(head -n2 /etc/passwd|grep -v "$my1stline")
cat /etc/passwd |grep -Ev "$my1stline|$my2ndline"
\n" .. এটা সব নেতিবাচক পূর্ণসংখ্যার ছাড়া অন্য জন্য কাজ করে-n -0যা ফেরৎ কিছুই , যেমনটা-n 0হবে (ব্যবহার করছে: মাথা (গনুহ coreutils) 7.4) ... তবে যখন একটি trailing\nউপস্থিত থাকলে,-n -0মুদ্রণ করে হিসাবে আশা করা হতে পারে-, অর্থাত্। এটি সম্পূর্ণ ফাইলটি মুদ্রণ করে ... সুতরাং এটি সমস্ত অ-শূন্য নেতিবাচক মানগুলির জন্য কাজ করে .. তবে-0কোনও অনুপস্থিতি না থাকলে ব্যর্থ হয়\n