তিনটি পৃথক sedকমান্ড:
sed '$!N;s/"[^"]*"\n<[^>]*>/other characters /;P;D'
sed -e :n -e '$!N;s/"[^"]*"\n<[^>]*>/other characters /;tn'
sed -e :n -e '$!N;/"$/{$!bn' -e '};s/"[^"]*"\n<[^>]*>/other characters /g'
তারা তিনটিই বেসিক s///ওবস্টিটিউশন কমান্ডটি তৈরি করে :
s/"[^"]*"\n<[^>]*>/other characters /
তারা সকলেই সর্বশেষ পংক্তিটি পরিচালনা করার ক্ষেত্রে যত্ন নেওয়ার চেষ্টা করে, কেননা sedপ্রান্তের ক্ষেত্রে তাদের আউটপুটটিতে ভিন্নতা রয়েছে। এই অর্থ $!যা প্রতি লাইন যে মিলে একটি ঠিকানা থাকে !না $শেষ সময়।
তারা সকলেই Nএকটি \nই- লাইন চরিত্রের অনুসরণ করে পরবর্তী ইনপুট লাইনটি প্যাটার্ন স্পেসে যুক্ত করতে অতিরিক্ত কমান্ডটি ব্যবহার করে । যে কেউ কিছু sedসময়ের জন্য \nইঙ্গিত করে চলেছে সে ইভলাইন চরিত্রের উপর নির্ভর করতে শিখবে - কারণ একটি পাওয়ার একমাত্র উপায় হ'ল এটি স্পষ্টভাবে সেখানে রাখা।
তিনটিই পদক্ষেপ নেওয়ার আগে যতটা সম্ভব সংক্ষিপ্ত ইনপুটটিতে পড়ার জন্য কিছু চেষ্টা করে - sedএটি করার আগে যত তাড়াতাড়ি সম্ভব পুরো ইনপুট ফাইলে না পড়ার দরকার পড়ে।
যদিও তারা সব কিছু করে N, তারা তিনটিই তাদের পুনরাবৃত্তির পদ্ধতিগুলির মধ্যে পৃথক।
প্রথম কমান্ড
প্রথম কমান্ড একটি খুব সাধারণ N;P;Dলুপ নিয়োগ করে । এই তিনটি কমান্ড কোনও পসিক্স-সামঞ্জস্যপূর্ণভাবে অন্তর্নির্মিত sedএবং এগুলি একে অপরকে সুন্দরভাবে পরিপূরক করে।
N- যেমনটি ইতিমধ্যে উল্লিখিত হয়েছে, Nসন্নিবেশ করা \nইওলাইন ডিলিমিটারের পরে প্যাটার্ন-স্পেসে এক্সপুট ইনপুট লাইনটি যুক্ত করে ।
P- মত p; এটি Pপ্যাটার্ন-স্পেসটি মুদ্রণ করে - তবে কেবলমাত্র প্রথমটি ঘটে যাওয়া \nইওলাইন চরিত্রটি। এবং সুতরাং, নিম্নলিখিত ইনপুট / আদেশ দেওয়া:
printf %s\\n one two | sed '$!N;P;d'
sed Pখালি একটাই । তবে, সাথে ...
D- মত d; এটি Dপ্যাটার্ন-স্পেসকে একাদশ করে এবং আর একটি লাইন-চক্র শুরু করে। বিপরীতে d , প্যাটার্ন-স্পেসে কেবলমাত্র Dপ্রথমটি ঘটে যাওয়া \nইওলাইন পর্যন্ত মুছবে। যদি \nইলাইন চরিত্রের অনুসরণ করে প্যাটার্ন-স্পেসে আরও থাকে sedতবে পরবর্তী লাইনের চক্রটি যা থাকে তা দিয়ে শুরু করে। dপূর্ববর্তী উদাহরণে যদি একটি দ্বারা প্রতিস্থাপন করা হয় D, উদাহরণস্বরূপ, এক এবং দুটি উভয় ছাঁটাই করা sedহবে ।P
এই কমান্ডটি কেবল সেই লাইনের জন্য পুনরাবৃত্তি করে যা দাবী বিবৃতিতে মেলে নাs/// । যেহেতু উবস্টিটিউশন যুক্ত s///ইওলাইনটিকে সরিয়ে দেয় , এগারোর প্যাটার্ন-স্পেসের পরে আর কিছুই থাকে না ।\nNsed D
পরীক্ষাগুলি Pএবং / বা Dবাছাইভাবে প্রয়োগ করার জন্য করা যেতে পারে তবে অন্যান্য কমান্ডও রয়েছে যা সেই কৌশলটির সাথে আরও উপযুক্ত। কারণ পুনরাবৃত্তিটি ধারাবাহিক রেখাগুলি পরিচালনা করতে প্রয়োগ করা হয় যা প্রতিস্থাপনের নিয়মের কেবলমাত্র অংশের সাথে মেলে , জরায়ুর উভয় প্রান্তের সাথে মিলিত রেখার ধারাবাহিক ধারাগুলি s///ভাল কাজ করে না .:
এই ইনপুট দেওয়া:
first "line"
<second>"line"
<second>"line"
<second>line and so on
... এটি মুদ্রণ ...
first other characters "line"
<second>other characters line and so on
এটি অবশ্য পরিচালনা করে
first "line"
second "line"
<second>line
...শুধুই সুন্দর.
দ্বিতীয় আদেশ
এই কমান্ডটি তৃতীয়টির মতোই অনুরূপ। দু'জনই একটি ক্ষেত্র:b / tইস্ট লেবেল নিয়োগ করে (যেমন জোসেফ আর-এর উত্তরগুলিতেও এখানে প্রদর্শিত হয়েছে ) এবং কিছু শর্তের ভিত্তিতে এটি পুনরুক্ত করে ।
-e :n -e- পোর্টেবল sedস্ক্রিপ্টগুলি ই- লাইন বা একটি নতুন ইনলাইন জেকিউশন স্টেটমেন্টের :সাহায্যে লেবেল সংজ্ঞাটি সীমিত করে দেবে।
\n-e
:n- নামের একটি লেবেল সংজ্ঞায়িত করে n। এটি হয় bnবা যে কোনও সময়ে যে কোনও সময়ে ফিরে যেতে পারে tn।
tn- tএস্ট কমান্ড একটি নির্দিষ্ট লেবেলে প্রত্যাবর্তন করে (বা যদি কোনও সরবরাহ না করা হয় তবে বর্তমান লাইন-চক্রের জন্য স্ক্রিপ্টটি ছেড়ে দেয়) যদি কোনও s///লেবেল সংজ্ঞায়িত হওয়ার পরে বা এটি সর্বশেষে tএএসটিস সফল বলে অভিহিত করা হয়।
এই কমান্ডটিতে ম্যাচিং লাইনের জন্য পুনরাবৃত্তি ঘটে। যদি sedসফলভাবে সঙ্গে প্যাটার্ন প্রতিস্থাপন অন্যান্য অক্ষরের , sedরিটার্ন :nলেবেল এবং চেষ্টা আবার। যদি কোনও s///অবস্হানটি sedস্বতঃপ্রিন্ট-প্যাটার্ন-স্পেস সম্পাদন না করে এবং পরবর্তী লাইন-চক্র শুরু করে।
এটি ধারাবাহিক ক্রমগুলি আরও ভাল পরিচালনা করে। যেখানে সর্বশেষটি ব্যর্থ হয়েছিল, সেখানে এটি মুদ্রণ করে:
first other characters other characters other characters line and so on
তৃতীয় আদেশ
যেমনটি উল্লেখ করা হয়েছে, এখানে যুক্তি শেষের সাথে খুব মিল, তবে পরীক্ষাটি আরও স্পষ্ট।
/"$/bn- এটি sedপরীক্ষা। কারণ র্যাঙ্ক bকমান্ড এই ঠিকানার ফাংশন, sedকেবল একটি ইলাইন সংযুক্ত হওয়ার পরে প্যাটার্নে bফিরে আসবে এবং প্যাটার্ন-স্পেসটি ডাবল-কোট দিয়ে এখনও শেষ হবে।:n\n"
যতটা সম্ভব সম্ভব Nএবং এর মধ্যে সামান্য কাজ করা হয়েছে b- sedনীচের লাইনটি আপনার নিয়মের সাথে মেলে না তা নিশ্চিত করার জন্য এই পদ্ধতিতে খুব দ্রুত ঠিক যতটা ইনপুট প্রয়োজন তা সংগ্রহ করতে পারে gather s///Ubstitution মধ্যে এটি নিয়োগ এখানে পৃথক gএবং তাই এটি একবারে সব প্রয়োজনীয় প্রতিস্থাপন করতে হবে - lobal পতাকা। অভিন্ন ইনপুট দেওয়া এই কমান্ডটি শেষের মতো একইভাবে আউটপুট দেয়।
\newline বিবৃতি দেন তা কেন আমি জিজ্ঞাসা করি। লোকেরা খুব কমই জিজ্ঞাসা করে যে তারাs//\n/জিএনইউ দিয়ে আপনি যেমনটা করতে পারেন তেমন করতে পারেন কিনাsed, যদিও অন্য বেশিরভাগইsedডান হাতের দিক থেকে এই পাল্টা প্রত্যাখ্যান করবেন। তবুও,\nপালানো কোনওsedপসিক্সের বাম দিকে কাজ করবে এবং আপনি তাদের পোর্টেবল করে অনুবাদ করতে পারবেনy/c/\n/যদিও এটির মতো একই প্রভাব থাকবেs/c/\n/gএবং তাই সর্বদা কার্যকর নয়।