আমি একটি পাঠ্য ফাইল থেকে একটি নির্দিষ্ট লাইন মুদ্রণের জন্য এই সমাধানটি পেরিয়ে এসেছি:
sed '123!d;q' file
এক্ষেত্রে প্রথম লাইনের ইনপুট দেওয়ার পরে কেন সেড ছেড়ে যায় না?
আমি একটি পাঠ্য ফাইল থেকে একটি নির্দিষ্ট লাইন মুদ্রণের জন্য এই সমাধানটি পেরিয়ে এসেছি:
sed '123!d;q' file
এক্ষেত্রে প্রথম লাইনের ইনপুট দেওয়ার পরে কেন সেড ছেড়ে যায় না?
উত্তর:
ইংরাজীতে, এই sed
প্রোগ্রামটির অর্থ: প্রতিটি লাইনের জন্য,
123!
] যদি বর্তমান লাইন সংখ্যা 123 না হয়, তবে [ d
] বর্তমান লাইনটি মুছুন এবং পরবর্তী চক্রটি শুরু করুন (অর্থাত্ পরের লাইনে যান);d
কমান্ডটি কার্যকর না করা হলে আমরা কেবলমাত্র এই স্থানে পৌঁছাতে পারি ), [ q
] আর কোনও লাইন প্রক্রিয়াজাত না করে প্রস্থান করুন (তবে আমাদের মরণ থ্রোতে বর্তমান লাইনটি মুদ্রণ করুন)।বা আপনি যদি পছন্দ করেন তবে শেল সিনট্যাক্সে:
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done
{d;q;}
, q
প্রতিটি লাইনে প্রয়োগ করা উচিত নয় (তাই কেবল প্রথম)?
q
প্রতিটি লাইনে এটি কার্যকর করা হয় যেখানে এটি কার্যকর করা হয়। তবে যখন লাইন নম্বরটি 123 নয়, d
কমান্ডটি কার্যকর করা হয় এবং এর অর্থ হ'ল তাত্ক্ষণিকভাবে পরবর্তী ইনপুট লাইনে চলে যাওয়া।
sed -n 123p
(একই আউটপুট প্রিন্ট করে) ব্যতীত এটি সম্ভাব্য হাজার হাজার লাইন প্রসেস করার চেয়ে 123 লাইন পরে থামায় যা এটি কোনওভাবেই কখনও কিছু করবে না।
!
সাথে সংযুক্ত ছিলd
, নয়123
।