Solução:
perl -lape '$\=/,/?"":"\n"' list.txt
Explicação:
Define o separador de registro de saída $\ para a string vazia "" se uma linha contiver uma vírgula; redefine para \n caso contrário (o separador de registro de saída é o que separa as linhas uma da outra na saída; no Unix, normalmente é uma nova linha). Equivalente ao mais longo e mais fácil de ler:
perl -lape '(/,/) ? ($\="") : ($\="\n")' list.txt
ou, da mesma forma:
perl -lape 'if (/,/) {$\=""} else {$\="\n"}' list.txt
Comentários:
O motivo sed não faz o que o OP esperava é que ele retire o separador de registro antes de trabalhar na linha e o coloque novamente depois. O separador de registro sendo "\n" por padrão, nenhum "\n" é encontrado para a substituição. Eu escolhi perl porque eu sei que o separador de registro é exposto como uma variável especial que pode ser explicitamente manipulada.
Minha solução é baseada na amostra de entrada postada e na saída desejada. Eu não acho que isso responda a pergunta no título: Substitua vírgula por nova linha seguindo com apenas um comando e espaço . Eu li isso muitas vezes, mas essas palavras simplesmente não formam uma sequência significativa para mim.
Editar - solução mais fácil:
perl -pe 's/,\n/,/' list.txt
Isso é o que eu sugeri nos comentários e pensei em adicioná-lo à resposta. Embora seja curto e imediato, qual é a graça de usar perl se você não conseguir mostrar uma variável especial pouco conhecida e uma sintaxe obscura? ;-P