echo ,,, |sed s':\(,\)\(,\):\1*\2:'g
पैदावार " ,*,,
" के बजाय " " क्यों होती है ,*,*,
? दूसरे शब्दों में: क्यों, "जी" ध्वज के बावजूद, *
एक जोड़ी अल्पविराम के बीच sed नहीं डालता है?
echo ,,, |sed s':\(,\)\(,\):\1*\2:'g
पैदावार " ,*,,
" के बजाय " " क्यों होती है ,*,*,
? दूसरे शब्दों में: क्यों, "जी" ध्वज के बावजूद, *
एक जोड़ी अल्पविराम के बीच sed नहीं डालता है?
जवाबों:
क्योंकि दो ,
एस के साथ (,\)\(,\)
, आप पहले से ही पहले दो ,
एस से मेल खा चुके हैं और रेगेक्स पैटर्न का मिलान अब तक बाकी लाइन के लिए नहीं होगा। अब केवल एक ही बचा है जो कि अंतिम है, ,
इसलिए इसे अभी-अभी छापा गया है क्योंकि यह इसके *
बीच का कोई दूसरा है।
यदि आपके पास एक ,
और इनपुट है, तो आपको वांछित (वैश्विक g
) प्रतिक्रिया मिलेगी :
% echo ,,,, | sed s':\(,\)\(,\):\1*\2:'g
,*,,*,
echo ,,,,, |sed s':\(,\)\(,\):\1*:’g
सवाल का जवाब पहले से ही @heemayl द्वारा दिया गया था
वैकल्पिक हल के साथ 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
बाहर?)