আমি একটি পাঠ্য ফাইল থেকে একটি নির্দিষ্ট লাইন মুদ্রণের জন্য এই সমাধানটি পেরিয়ে এসেছি:
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।