তিনটি পৃথক 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///
ইওলাইনটিকে সরিয়ে দেয় , এগারোর প্যাটার্ন-স্পেসের পরে আর কিছুই থাকে না ।\n
N
sed
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 পতাকা। অভিন্ন ইনপুট দেওয়া এই কমান্ডটি শেষের মতো একইভাবে আউটপুট দেয়।
\n
ewline বিবৃতি দেন তা কেন আমি জিজ্ঞাসা করি। লোকেরা খুব কমই জিজ্ঞাসা করে যে তারাs//\n/
জিএনইউ দিয়ে আপনি যেমনটা করতে পারেন তেমন করতে পারেন কিনাsed
, যদিও অন্য বেশিরভাগইsed
ডান হাতের দিক থেকে এই পাল্টা প্রত্যাখ্যান করবেন। তবুও,\n
পালানো কোনওsed
পসিক্সের বাম দিকে কাজ করবে এবং আপনি তাদের পোর্টেবল করে অনুবাদ করতে পারবেনy/c/\n/
যদিও এটির মতো একই প্রভাব থাকবেs/c/\n/g
এবং তাই সর্বদা কার্যকর নয়।