কেন echo ,,, |sed s':\(,\)\(,\):\1*\2:'g" ,*,," এর চেয়ে " ,*,*," ফলন হয় ? অন্য কথায়: "জি" পতাকা থাকা সত্ত্বেও কেন *এক জোড়া কমাতে "sedোকানো হয় না ?"
কেন echo ,,, |sed s':\(,\)\(,\):\1*\2:'g" ,*,," এর চেয়ে " ,*,*," ফলন হয় ? অন্য কথায়: "জি" পতাকা থাকা সত্ত্বেও কেন *এক জোড়া কমাতে "sedোকানো হয় না ?"
উত্তর:
কারণ দুটো ,মধ্যে গুলি (,\)\(,\), আপনি ইতিমধ্যে প্রথম দুই মিল খেতে ,s এবং Regex প্যাটার্ন এতদূর মিলেছে পরিত্যাগ করা না লাইন বাকি জন্য হবে। কেবলমাত্র একটি এখন বাকি আছে যা এটি সর্বশেষ ,তাই এটি কেবল *দ্বিতীয়টি প্রান্তিকের মধ্যে এটির বাইরে যেমন ছাপা হয়েছে ।
আপনার যদি অন্য কোনও ,ইনপুট থাকে তবে আপনি পছন্দসই (বৈশ্বিক, g) প্রতিক্রিয়া পাবেন:
% echo ,,,, | sed s':\(,\)\(,\):\1*\2:'g
,*,,*,
echo ,,,,, |sed s':\(,\)\(,\):\1*:’g
কেন প্রশ্নটির উত্তর ইতিমধ্যে @ হেইমাইল দ্বারা দেওয়া হয়েছে?
sed(এখানে জিএনইউ ধরে নিচ্ছি) সহ কার্যতালিকা sed- যতক্ষণ কোনও ম্যাচ পাওয়া যায় ততক্ষণ পুনরুক্তি করে লুপ
$ echo ,,, | sed -E ':a s/(,)(,)/\1*\2/ ; ta'
,*,*,
$ echo ,,,, | sed -E ':a s/(,)(,)/\1*\2/ ; ta'
,*,*,*,
POSIXly:
$ echo ,,,, | sed -e :a -e 's/\(,\)\(,\)/\1*\2/; ta'
,*,*,*,
বা সাথে perl
$ echo ,,, | perl -pe 's/,\K(?=,)/*/g'
,*,*,
$ echo ,,,, | perl -pe 's/,\K(?=,)/*/g'
,*,*,*,
sএবংgউদ্ধৃতি চিহ্ন বাইরে?)