Um jeito de fazer isso em sed
seria usar um loop:
$ echo ",,a,,,b,,,," | sed ':a; s/\(^\|,\)\(,\|$\)/-/; ta'
-,-,a,-,-,b,-,-,-,-
Se a sua versão suportar expressões regulares estendidas, você poderá simplificá-la para uma forma mais legível
sed -E ':a; s/(^|,)(,|$)/-/; ta'
Uma maneira alternativa de fazer isso em perl
, dividindo em campos separados por vírgulas e, em seguida, mapeando campos vazios para hifens:
perl -anle 'print join ",", map { $_ ? $_ : "-" } split(",", $_, -1)'
(O argumento adicional -1
para o split
força os campos vazios a serem incluídos).