echo ,,, |sed s':\(,\)\(,\):\1*\2:'g「,*,,」ではなく「」が生成されるのはなぜ,*,*,ですか?言い換えれば、「g」フラグにもかかわらず、sed *が1組のコンマの間に' 'を挿入しないのはなぜですか?
echo ,,, |sed s':\(,\)\(,\):\1*\2:'g「,*,,」ではなく「」が生成されるのはなぜ,*,*,ですか?言い換えれば、「g」フラグにもかかわらず、sed *が1組のコンマの間に' 'を挿入しないのはなぜですか?
回答:
質問の理由はすでに@heemaylによって回答されています
回避策sed(ここではGNUを想定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外したのですか?)