শাদুর দ্বারা চিহ্নিত হিসাবে সেরা বিকল্পটি ভিএম / জিভিম, তবে আপনি যদি কোনও স্ক্রিপ্ট চান, আপনি স্ট্যাক ওভারফ্লোতে অনুরূপ প্রশ্নের আমার উত্তরটি পরীক্ষা করতে পারেন । আমি আমার পুরো উত্তর এখানে পুনরাবৃত্তি:
আপনি যা করতে চেষ্টা করছেন তা যদি কোনও সাধারণ উদ্দেশ্য ভাষার ক্ষেত্রে প্রযোজ্য হয়, তবে এটি একটি তুচ্ছ সমস্যা।
শুরু করতে আপনাকে মন্তব্য এবং স্ট্রিং সম্পর্কে চিন্তা করতে হবে। আপনি যদি নিয়মিত এক্সপ্রেশন ব্যবহার করে এমন কোনও প্রোগ্রামিং ভাষায় এটি পরীক্ষা করতে চান তবে এটি আপনার অনুসন্ধানটি আরও শক্ত করে তুলবে।
সুতরাং আমি আসার আগে এবং আপনাকে আপনার প্রশ্নের কোনও পরামর্শ দেওয়ার আগে আমার আপনার সমস্যার ক্ষেত্রের সীমাটি জানতে হবে। যদি আপনি গ্যারান্টি দিতে পারেন যে কোনও স্ট্রিং, কোনও মন্তব্য নেই এবং উদ্বেগের জন্য কোনও নিয়মিত প্রকাশ নেই - বা কোডটি বন্ধনীগুলি সম্ভবত ব্যবহারের জন্য অন্য যে কোনও কারণে ব্যবহার করা যেতে পারে যা আপনি ভারসাম্যপূর্ণ কিনা তা যাচাই করে যাচ্ছেন - এই কোডটি জীবনকে অনেক সহজ করে তুলুন।
আপনি যে ভাষাটি পরীক্ষা করতে চান তা জানার পক্ষে সহায়ক হবে।
যদি আমি এই অনুমানটি গ্রহণ করি যে কোনও আওয়াজ নেই, অর্থাত্ সমস্ত বন্ধনী দরকারী বন্ধনী, তবে আমার কৌশলটি পুনরাবৃত্তি হবে:
আমি কেবল সমস্ত অভ্যন্তর বন্ধনী জোড়া সন্ধান করতে এবং অপসারণ করতে চাই: যেগুলির ভিতরে কোনও বন্ধনী নেই। এটি একটি দীর্ঘ দীর্ঘ লাইনে সমস্ত লাইন ভেঙে দিয়ে সবচেয়ে ভাল করা হয় (এবং লাইন রেফারেন্স যুক্ত করার জন্য কোনও পদ্ধতি অনুসন্ধান করুন, আপনার যদি সেই তথ্যটি বের করার প্রয়োজন হয়)। এই ক্ষেত্রে অনুসন্ধান এবং প্রতিস্থাপন করা বেশ সহজ:
এটির জন্য একটি অ্যারে প্রয়োজন:
B["("]=")"; B["["]="]"; B["{"]="}"
এবং এই উপাদানগুলির মাধ্যমে একটি লুপ:
for (b in B) {gsub("[" b "][^][(){}]*[" B[b] "]", "", $0)}
আমার পরীক্ষার ফাইলটি নিম্নরূপ:
#!/bin/awk
($1 == "PID") {
fo (i=1; i<NF; i++)
{
F[$i] = i
}
}
($1 + 0) > 0 {
count("VIRT")
count("RES")
count("SHR")
count("%MEM")
}
END {
pintf "VIRT=\t%12d\nRES=\t%12d\nSHR=\t%12d\n%%MEM=\t%5.1f%%\n", C["VIRT"], C["RES"], C["SHR"], C["%MEM"]
}
function count(c[)
{
f=F[c];
if ($f ~ /m$/)
{
$f = ($f+0) * 1024
}
C[c]+=($f+0)
}
আমার সম্পূর্ণ স্ক্রিপ্ট (লাইন রেফারেন্স ছাড়াই) নিম্নরূপ:
cat test-file-for-brackets.txt | \
tr -d '\r\n' | \
awk \
'
BEGIN {
B["("]=")";
B["["]="]";
B["{"]="}"
}
{
m=1;
while(m>0)
{
m=0;
for (b in B)
{
m+=gsub("[" b "][^][(){}]*[" B[b] "]", "", $0)
}
};
print
}
'
সেই স্ক্রিপ্টটির আউটপুট বন্ধনীগুলির অভ্যন্তরীণ অবৈধ ব্যবহারগুলিতে থামে। তবে সাবধান থাকুন: 1 / এই স্ক্রিপ্টটি মন্তব্যগুলিতে, নিয়মিত অভিব্যক্তিগুলিতে বা স্ট্রিংগুলিতে বন্ধনীর সাথে কাজ করবে না, 2 / এটি মূল ফাইলটিতে সমস্যাটি কোথায় রয়েছে তা রিপোর্ট করে না, 3 / যদিও এটি সমস্ত ভারসাম্যযুক্ত জোড়গুলি সরিয়ে ফেলবে যা এটি অন্তঃপুরে থামে ত্রুটির শর্ত এবং সমস্ত নিবন্ধ বন্ধনী রাখে।
পয়েন্ট 3 / সম্ভবত সম্ভবত একটি শোষণীয় ফলাফল, যদিও আমি মনে করি যে প্রতিবেদন করার পদ্ধতিটি সম্পর্কে আপনি নিশ্চিত নন।
পয়েন্ট 2 / বাস্তবায়িত করা তুলনামূলকভাবে সহজ তবে উত্পাদন করতে কয়েক মিনিটের বেশি সময় নেয়, সুতরাং আমি এটি আপনার কাছে রেখে দেব।
পয়েন্ট 1 / হ'ল জটিল কারণ আপনি কখনও কখনও নেস্টেড শুরু এবং শেষগুলি, বা বিশেষ অক্ষরের জন্য বিশেষ উদ্ধৃতি বিধি প্রতিযোগিতার সম্পূর্ণ নতুন ক্ষেত্র প্রবেশ করেন ...