Tente:
perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
s@(^"|"$|\.)|"@$1||"\\""@ge;$r/ge' file.csv
Isso usa heurística para tentar identificar esses caracteres de aspas duplas que não são os que os encerram e escapá-los com uma barra invertida.
Por exemplo, isso mudaria:
"asd","","a,b"c,d"e,f",""",,blah
Para:
"asd","","a,b\"c,d\"e,f","\"",,blah
(deixando o original como file.csv.back
)
Para alterá-las para aspas simples, em vez de as escapar:
perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
s@(^"|"$|\.)|"@$1||"'\''"@ge;$r/ge' file.csv