sed 's/[^ ]* */[&]P/;s//&+pc/3'|dc
... কপি করে প্রিন্ট ...
2015-01 6000
2015-02 8000
2015-03 10000
সুতরাং উপরে আমি একজন ডিক্লেয়ার নিয়মিত প্রকাশ যা সংজ্ঞায়িত ক্ষেত্র-ব্যাপ্তি করে একটি নিয়ে গঠিত *পরিবর্তনশীল দৈর্ঘ্যের অক্ষর যা হয় একক ক্রম ^না <স্পেস> অবিলম্বে দ্বারা অনুসরণ *পরিবর্তনশীল দৈর্ঘ্যের অক্ষর যা হয় একক ক্রম <স্পেস> । এই ঘোষণা বিরুদ্ধে প্রয়োগ করা হয় sedএর প্যাটার্ন স্থান রয়েছে যা একটি স্ট্রিং সীমায়িত নয় (ডিফল্ট অনুসারে) প্রতিটি দ্বারা \newline চরিত্র যা ইনপুট ঘটে, এবং যা যাও recursively প্রতিস্থাপিত হয় (ডিফল্ট অনুসারে) একই প্রতিটি সংঘটন জন্য পরবর্তী সঙ্গে।
এই ঘোষণার জন্য ইন্টারফেসটি দ্বিগুণ, এবং প্রতিটি স্তরে কমপক্ষে একটি আন্তর্জাতিক আইইইই অফিসিয়াল স্ট্যান্ডার্ড কমিটি দ্বারা সম্পূর্ণ নিয়ন্ত্রিত এবং নির্দিষ্ট করা হয়েছে যাতে sedকমান্ড সিনট্যাক্সের পূর্বাভাসযোগ্য প্রয়োগ নিশ্চিত করতে পারে । উদাহরণস্বরূপ, sedএর এপিআই সিনট্যাক্স এ ক্ষেত্রে /অ্যাড্রেস /কমান্ডের সাথে প্রয়োগ করা হয় (যা সর্বদা কোনও sed s///যৌগ কমান্ডের প্রথম উপাদান ) তবে এর বিষয়বস্তুগুলি আরও একটি বেসিক এপিআই দ্বারা এটির জন্য নির্দিষ্ট করা সাবসেট হিসাবে ব্যাখ্যা করা হয় স্ট্যান্ডার্ড সি লাইব্রেরিতেregcomp() ফাংশন ।
আমি এই বিবৃতি অসংশয়ে করতে পারেন, কারণ sedহয় না নিছক একটি প্রোগ্রাম, কিন্তু বরং এক্সিকিউটেবল নামে সংকলিত sedআমার ইউনিক্সের মত মেশিন একটি হল বাস্তবায়ন ভালভাবে সংজ্ঞায়িত ঐতিহাসিকভাবে প্রতিষ্ঠিত, এবং মান নিয়ন্ত্রিত sed আবেদন আমার সিস্টেমের regular- এর এক্সপ্রেশন ম্যাচ লাইব্রেরি।
sedঅনুমান থেকে :
sedউপযোগ BREs বর্ণিত সহায়তা প্রদান করিবে XBD বেসিক রেগুলার এক্সপ্রেশন ...
... যেখানে আমরা ...
উভয় BREs এবং Eres অধীনে POSIX.1-2008 সিস্টেম ইন্টারফেস আয়তনের রেগুলার এক্সপ্রেশন ম্যাচিং ইন্টারফেস দ্বারা সমর্থিত regcomp(), regexec()এবং এর সাথে সম্পর্কিত ফাংশন।
একটি অ্যাপ্লিকেশন যা কল করে regcomp()এটি একটি প্যাটার্ন স্ট্রিং উপস্থাপন করবে এবং ...
... [টি] তিনি regcomp()ফাংশনটি প্যাটার্ন আর্গুমেন্ট দ্বারা নির্দেশিত স্ট্রিংয়ে থাকা নিয়মিত প্রকাশটি সংকলন করবেন এবং ফলাফলটি কাঠামোর পূর্ববর্তী স্থানে রাখবেন ...
এটিতে কাজ করার জন্য, অ্যাপ্লিকেশনটি তার regcomp()সহকর্মী ফাংশনটিকে নির্দেশ করবে ...
... [টি] তিনি regexec()ফাংশনটি পূর্ববর্তী কল দ্বারা সূচিত সংকলিত নিয়মিত অভিব্যক্তি প্রেগের সাথে স্ট্রিং দ্বারা নির্দিষ্ট নাল-টার্মিনেটেড স্ট্রিংটির সাথে তুলনা করেregcomp() ...
... regexec()এর সাবস্ট্রিং এর অফসেট সঙ্গে [একটি] অ্যারের উপাদানের মধ্যে দ্বারা একযোগে ভর্তি করব স্ট্রিং যে মিলা \(আলাদা subexpressions \)এর প্যাটার্ন ... প্যাটার্ন নিজেই একটি subexpression যেমন বড়, মোট ছাত্র ...
... [T] তিনি regexec()কাজ সব পূরণ করতে হবে nmatch উপাদান pmatch , যেখানে nmatch এবং pmatch অ্যাপ্লিকেশন দ্বারা সরবরাহ করা হয়, এমনকি যদি এর কিছু কিছু উপাদান pmatch মধ্যে subexpressions মিলা না প্যাটার্ন ।
এবং তাই যখন আমি ...
/[^ ]* */
... sedপ্রথমে নিয়মিত অভিব্যক্তি সংকলন করে ফলাফলগুলিকে মেমোরিতে সংরক্ষণ করে, তারপরে আমার কমান্ডটি পূরণের জন্য যতবার প্রয়োজন ততবার আমার প্যাটার্ন-স্পেসের বিষয়বস্তুগুলিতে সঞ্চিত সংকলিত-অটোমেটন প্রয়োগ করে। প্রতিবার এটি ফলাফলটি হ'ল এক বা একাধিক নাল-সীমাবদ্ধ ক্ষেত্রগুলির অ্যারে হিসাবে অফসেটগুলিতে ডিলিট হিসাবে দেওয়া regexec()।
এবং আমি যখন ...
//
... ইঙ্গিত করার জন্য যে সর্বাধিক সংজ্ঞায়িত নিয়মিত অভিব্যক্তিটি ব্যবহার করা উচিত, sedকেবলমাত্র regexec()পূর্বনির্ধারিত নিয়মিত অভিব্যক্তিটি পুনরায় ব্যবহার করে আবার কল করতে পারে, তবে সম্ভবত এটি পরিবর্তিত স্ট্রিং আর্গুমেন্টে প্রয়োগ করতে হবে বা আমার আদেশ অনুসারে নতুন নামফল প্যারামিটার প্রয়োগ করতে হবে।
আরও নির্দিষ্টভাবে এখনও ...
s/[^ ]* */[&]P/
- প্রথম সংঘটন প্রতিস্থাপন প্যাটার্ন একটি সঙ্গে প্যাটার্ন-স্পেস মধ্যে
[বাম-স্কয়ার বন্ধনী, তারপর &নিজেই, তারপর ]ডান-স্কয়ার বন্ধনী একটি দ্বারা অনুসরণ Pঅক্ষর।
s//&+pc/3
- বর্তমান ব্যবহৃত প্যাটার্ন স্পেসে আবার সর্বশেষ ব্যবহৃত নিয়মিত এক্সপ্রেশন প্রয়োগ করুন এবং প্যাটার্নের
3 তৃতীয় ঘটনাকে প্যাটার্ন স্পেসে নিজের সাথে সংযুক্ত স্ট্রিং দ্বারা প্রতিস্থাপন করুন ।&+pc
এবং সুতরাং প্রতিটি sedইনপুট প্রতিটি লাইন জন্য এটি তার স্টাডাউট লিখুন, আপনার উদাহরণ ডেটা দেওয়া:
[2015-01 ]P5000 1000+pc
[2015-02 ]P6000 2000+pc
[2015-03 ]P7000 3000+pc
এটি দেখতে দেখতে অদ্ভুত dcলাগবে , তবে ক্যালকুলেটরটি বর্গাকার বন্ধনীগুলির মধ্যে তার ইনপুটগুলিতে স্ট্রিংয়ের উদ্ধৃতি দেয় এবং Pকমান্ড উভয়ই একটি \newline সংযুক্ত না করে স্ট্যাকের শীর্ষটি এবং পরে পপটিকে ইনপুট স্ট্যাকের বাইরে মুদ্রণ করবে ।
এবং সুতরাং, উদাহরণ হিসাবে প্রথম লাইনটি ব্যবহার করে, এটি dcকরবে:
[2015-01 ]P
Pখাঁজ এবং স্ট্যাক শীর্ষ পপ
5000
5000স্ট্যাকের শীর্ষে নম্বরটি চাপুন এবং বর্তমানে স্ট্যাকের সমস্ত উপাদানকে (বর্তমানে কোনও নয়) একে একে নীচে ঠেকান ।
1000
- তবুও, তবে এবার মূল স্ট্যাকের শীর্ষে 5000 নম্বরটি একে একে নীচে ঠেলে দেওয়া হবে এবং স্ট্যাকের দ্বিতীয় উপাদান হয়ে উঠবে।
+
- একসাথে স্ট্যাকের শীর্ষ দুটি নম্বর যুক্ত করুন, স্ট্যাকের বাইরে থাকা উভয়কেই পপ করুন এবং স্ট্যাকের শীর্ষে যোগফলটি চাপুন।
- এটি কেবল সংখ্যার সমন্বয়ে একটি স্ট্যাকের ফলস্বরূপ
6000 ।
- স্ট্যাকের শীর্ষ দুটি উপাদানগুলির মধ্যে একটি যদি
[স্ট্রিং হয় তবে এটি একটি বাক্য গঠন ত্রুটি ]।
p
pস্ট্যাকের \nশীর্ষটি ছড়িয়ে দিন এবং তার পরে স্ট্যাকের বাইরে থেকে পপিং না করে একটি সংযুক্ত ইওলাইন থাকে।
c