সিডে `-n` বিকল্পটি কী করে?


13

এটি ম্যান পেজ এন্ট্রি -n:

-n

প্যাটার্ন স্পেসের স্বয়ংক্রিয় মুদ্রণ দমন করে

আমি লক্ষ্য করেছি যে নির্দিষ্ট ক্রিয়াকলাপের জন্য ব্যবহার না করার সময় -nপ্রতিটি লাইন স্টাডআউটে মুদ্রিত হয় (এবং অনুরোধ করা লাইনগুলি দু'বার মুদ্রিত হয়):

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

যাইহোক, এই আইনটি অন্যান্য কমান্ডগুলির জন্য ধারণ করে না:

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

সুতরাং -nঠিক কি না ?

উত্তর:


17

সাধারণত, সেড প্রতিটি লাইন প্রক্রিয়াজাত করে (বিকল্পগুলি ইত্যাদি করে), তারপরে ফলাফলটি মুদ্রণ করে। যদি প্রসেসিংয়ের সাথে লাইনটি মুদ্রিত হয় (যেমন সেডের pকমান্ড) জড়িত থাকে , তবে এটি দু'বার মুদ্রিত হয়ে যায় (একবার প্রক্রিয়া করার সময়, তারপরে আবার স্বয়ংক্রিয় পোস্ট-প্রসেসিং প্রিন্ট দ্বারা)। -nবিকল্প স্বয়ংক্রিয় মুদ্রণ, যা লাইন আপনি নির্দিষ্টভাবে প্রিন্ট করতে মুদ্রিত পেতে না এটা বলবেন না মানে নিষ্ক্রিয়, এবং লাইন আপনি স্পষ্টভাবে মুদ্রণ করতে এটা বলতে পারি না (এর সাথে যেমন p) শুধুমাত্র একবার মুদ্রিত দেখায়।

  • sed -n '2,3p' test.txt - অনুরোধ হিসাবে কেবল 2 থেকে 3 লাইন মুদ্রণ করে

  • sed '2,3p' test.txt - প্রতিটি লাইন (স্বয়ংক্রিয়ভাবে) মুদ্রণ করে এবং দ্বিতীয় বারের মতো 2-3 টিও প্রিন্ট করে

  • sed -n 's/t/T/' test.txt - প্রতিটি লাইনে "টি" দিয়ে "টি" প্রতিস্থাপন করে তবে ফলাফল প্রিন্ট করে না -n

  • sed 's/t/T/' test.txt - প্রতিটি লাইনে "টি" এর সাথে "টি" প্রতিস্থাপন করে এবং ফলাফলটি স্বয়ংক্রিয়ভাবে মুদ্রণ করে

এবং আমাকে আরও কয়েকটি উদাহরণ যুক্ত করতে দিন:

  • sed -n 's/t/T/p' test.txt - প্রতিটি লাইনে "টি" এর পরিবর্তে "টি" প্রতিস্থাপন করে, প্রতিস্থাপনটি হয়েছিল যেখানে কেবলমাত্র লাইনগুলি মুদ্রণ করে (যেমন "দ্বিতীয়" নয়)

  • sed 's/t/T/p' test.txt - প্রতিটি লাইনে "টি" এর সাথে "টি" প্রতিস্থাপন করে, প্রতিস্থাপনটি ঘটেছিল এমন লাইনগুলি মুদ্রণ করে, তবে প্রতিটি লাইন স্বয়ংক্রিয়ভাবে মুদ্রণ করে (ফলস্বরূপ: "দ্বিতীয়" একবার মুদ্রিত হয়, অন্যরা সমস্তবার দুবার)

  • sed '2,3p; 3p' test.txt- 1, 4 এবং 5 লাইন একবার মুদ্রণ করে (অটো প্রিন্ট); 2 লাইন দু'বার (প্রথম pকমান্ড তারপরে স্বয়ংক্রিয় মুদ্রণ), এবং লাইন 3 বার (প্রতিটি pকমান্ডের জন্য, তারপরে আবার স্বয়ংক্রিয়ভাবে)।


আপনাকে গর্ডন ধন্যবাদ তবে আপনার মূল্যায়ন কেবলমাত্র আমার পর্যবেক্ষণের পুনরাবৃত্তি করে। প্রথম দুটি উদাহরণে -nবিশেষভাবে অনুরোধ করা লাইনগুলি ছাড়াও প্রতিটি লাইন প্রিন্ট না করেই সেড করুন । এই ক্ষেত্রে -n পার্স করা প্রতিটি লাইনের মুদ্রণ দমন করে । তবে তৃতীয় এবং চতুর্থ উদাহরণে আচরণটি আলাদা। এই ক্ষেত্রে সেড ব্যতীত -nদু'বার লাইন আউটপুট দেয় না, সুতরাং ব্যবহার -nকরে প্রতিটি পংক্তিকে মুছে ফেলা দমন করে না বরং পরিবর্তিত লাইনের মুদ্রণকে দমন করে । আচরণটি যখন এক বা অন্য হবে তখন আমার সাধারণীকরণে অসুবিধা হচ্ছে।
dotancohen

না, উভয় ক্ষেত্রেই -nহুবহু একই কাজ করছে: প্রতিটি লাইন থেকে স্বয়ংক্রিয়ভাবে মুদ্রিত হওয়া (এবং পরিবর্তিত কমান্ডের পরিবর্তক pএবং pপরিবর্তক কমান্ডে লাইনটি অতিরিক্ত সময় প্রিন্ট করার কারণ ঘটায়) যেখানে মোডগুলি নির্দিষ্টভাবে বলা হয় কেবল তখন মুদ্রণ করা হয় to ( pকমান্ড ইত্যাদি সহ)
গর্ডন ডেভিসন

এটিকে অন্য কোনও উপায়ে রাখুন: সেড কমান্ডে -nবিকল্প এবং আরও যোগ করার চেষ্টা করুন ; p(উদাহরণস্বরূপ sed -n '2,3p; p', এবং আপনি যেমনটি না পেয়ে যেমন ফলাফল পান -nতবে ডিফল্ট স্বয়ংক্রিয় মুদ্রণকে দমন করে, এবং ; pসংযোজন একটি স্পষ্টত (বেশিরভাগ সমতুল্য) ) প্রিন্ট করুন
গর্ডন ডেভিসন

আমি এখন দেখছি, আপনাকে ধন্যবাদ। উদাহরণটি স্পষ্ট করে তুলতে আপনার সময় দেওয়ার জন্য আমি অনেক প্রশংসা করি। একটি দুর্দান্ত সপ্তাহ আছে!
dotancohen
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.