মাল্টলাইন পাঠ্য ফাইলে নেস্টেড কোঁকড়ানো বন্ধনীগুলির মধ্যে সমস্ত পাঠ আমি কীভাবে মুছতে পারি?


9

এই প্রশ্নটি থেকে আসে কিভাবে আমি একটি বহু লাইন পাঠ্য ফাইলের কোঁকড়ানো বন্ধনীগুলির মধ্যে সমস্ত পাঠ মুছে ফেলতে পারি? (ঠিক একই, তবে বাসা বাঁধার জন্য প্রয়োজনীয়তা ছাড়াই)।

উদাহরণ:

This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.

হওয়া উচিত:

This is 
that wants
 anyway.

কোনও ধরণের এক-লাইন বাশ কমান্ড (awk, সেড, পার্ল, গ্রেপ, কাট, ট্র ... ইত্যাদি) দিয়ে এটি করা কি সম্ভব?

উত্তর:


13
$ sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' file3
This is 
that wants
 anyway.

ব্যাখ্যা:

  • :again;$!N;$!b again

    এটি পুরো ফাইলটিতে পড়ে।

    :againএকটি লেবেল Nপরের লাইনে $!Nপড়ে এবং পরের লাইনে শর্ত থাকে যে আমরা ইতিমধ্যে শেষ লাইনে নেই on $!b againশাখা ফিরে againশর্তে যে এই শেষ লাইন নয় উপর লেবেল।

  • :b

    এটি একটি লেবেল সংজ্ঞায়িত করে b

  • s/{[^{}]*}//g

    এটি পাঠ্যের ব্রেসগুলিতে মুছে ফেলা হয় যতক্ষণ না পাঠ্যের অভ্যন্তরীণ ধনুর্বন্ধনী থাকে।

  • t b

    উপরের বিকল্প কমান্ডের পরিবর্তনের ফলে, লেবেলে ফিরে যান b। এইভাবে, সমস্ত ব্রেস-গ্রুপগুলি সরিয়ে না দেওয়া পর্যন্ত বিকল্প কমান্ডটি পুনরাবৃত্তি করা হয়।


3

একটি পার্ল পদ্ধতির:

$ perl -F"" -a00ne 'for (@F){$i++ if /{/; $i||print; $i-- if /}/}' file
This is 
that wants
 anyway

ব্যাখ্যা

  • -a: দ্বারা প্রদত্ত ফাইল বিভেদক স্বয়ংক্রিয় বিভাজন সক্রিয় -Fমধ্যে @Fঅ্যারে।
  • -F"": ইনপুট ক্ষেত্রের বিভাজকটি খালি স্থির করে দেয় যা প্রতিটি উপাদানকে @Fইনপুট অক্ষরের অন্যতম হতে পারে।
  • -00: "অনুচ্ছেদ মোড" চালু করুন, যেখানে একটি "লাইন" পরপর দুটি নতুন লাইন অক্ষর হিসাবে সংজ্ঞায়িত করা হয়। এর অর্থ এই যে পুরো ফাইলটি একক লাইন হিসাবে বিবেচিত হবে। যদি আপনার ফাইলে অনেকগুলি অনুচ্ছেদ থাকতে পারে এবং বন্ধনীগুলি একাধিক অনুচ্ছেদ বিস্তৃত করতে পারে তবে -0777পরিবর্তে ব্যবহার করুন।
  • -ne: একটি ইনপুট ফাইল পড়ুন এবং -eপ্রতিটি লাইনে প্রদত্ত স্ক্রিপ্ট প্রয়োগ করুন ।

লিপি নিজেই বেশ সহজ। জবাবী একের পর প্রত্যেক বার এক একটা মান বৃদ্ধি হয় {দেখা যায় এবং যে জন্য একের পর decremented হয় }। এর অর্থ হ'ল যখন কাউন্টারটি 0 হয়, তখন আমরা বন্ধনীগুলির মধ্যে থাকি না এবং প্রিন্ট করা উচিত:

  • for (@F){}: @Fলাইনের প্রতিটি অক্ষরের প্রতিটি উপাদানের জন্য এটি করুন।
  • $i++ if /{/;: $iএই অক্ষরটি এক হলে বৃদ্ধি হয়{
  • $i||print;: $iসেট না করা থাকলে মুদ্রণ (সেট না করা হিসাবে 0 গণনা)।
  • $i-- if /}/: $iএই চরিত্রটি এক হলে হ্রাস}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.