Expressões regulares e sed não combinam muito com esse tipo de tarefa, mas é bastante simples usar jq , uma ferramenta de processamento JSON:
$ jq -r '.list[]|[.dt, .main[]] | @csv' < data.json
1519333200,271.62,271.62,272.921,1028.3,1037.2,1028.3,88,-1.3
1519344000,271.22,271.22,272.193,1028.11,1037.04,1028.11,100,-0.98
jq recebe um fluxo de dados JSON e filtra-o para extrair os dados desejados, de forma análoga a sed , mas para dados estruturados, em vez de texto. Este comando toma cada elemento da matriz "list" ( .list[] ) e arranca o campo "dt" ( .dt ) de o objeto dentro junto com tudo no objeto "principal" também ( .main[] ) , colocando todo o lote em uma matriz e convertendo isso para uma linha CSV ( @csv ) .
Se você estiver interessado em campos específicos ou quiser reorganizá-los, também poderá listá-los:
$ jq -r '.list[]|[.dt, .main.temp_min, .main.humidity] | @csv' < data.json
1519333200,271.62,88
1519344000,271.22,100
Basta listar cada um com quem você se importa e ignorar o resto.
Se você quiser entrar em outras partes dos dados, você pode colocar isso lá também: .clouds irá olhar para o campo clouds , ou você pode ler a velocidade do vento com .wind.speed - sempre um ponto antes do nome, como se você estivesse escrevendo JavaScript. O manual jq é bastante abrangente para qualquer comportamento personalizado que você precise.