উত্তর:
আপনি এটি প্রথম দুটি লাইন ফালা ব্যবহার করতে পারেন :
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 +N
tail -n +N
tac
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