এই সেড কমান্ড কিভাবে কাজ করে?


12

আমি একটি পাঠ্য ফাইল থেকে একটি নির্দিষ্ট লাইন মুদ্রণের জন্য এই সমাধানটি পেরিয়ে এসেছি:

sed '123!d;q' file

এক্ষেত্রে প্রথম লাইনের ইনপুট দেওয়ার পরে কেন সেড ছেড়ে যায় না?

উত্তর:


20

ইংরাজীতে, এই 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, নয় 123
রোজিট্রিজেভিয়াচজ

@ গিলস: ধনুর্বন্ধনী অনুপস্থিত {d;q;}, qপ্রতিটি লাইনে প্রয়োগ করা উচিত নয় (তাই কেবল প্রথম)?
enzotib

1
@ এনজোটিব qপ্রতিটি লাইনে এটি কার্যকর করা হয় যেখানে এটি কার্যকর করা হয়। তবে যখন লাইন নম্বরটি 123 নয়, dকমান্ডটি কার্যকর করা হয় এবং এর অর্থ হ'ল তাত্ক্ষণিকভাবে পরবর্তী ইনপুট লাইনে চলে যাওয়া।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

ক্রিস্টাল স্পষ্ট ব্যাখ্যা
রাহুল পাতিল

মূলত এটি একই ধরণের sed -n 123p(একই আউটপুট প্রিন্ট করে) ব্যতীত এটি সম্ভাব্য হাজার হাজার লাইন প্রসেস করার চেয়ে 123 লাইন পরে থামায় যা এটি কোনওভাবেই কখনও কিছু করবে না।
ওয়াইল্ডকার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.