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
外したのですか?)