Minha própria solução, usando apenas sed
, removendo todos os pontos-e-vírgulas que não são justapostos com delimitadores ou campos numéricos (o comando awk
está lá apenas para clareza de exposição):
echo '"This";"is";1;"line" of" data";""without";"extra quotes""' | sed -E 's/([^;])"+([^;])//g' | awk 'BEGIN { FPAT = "([^;]+)|(\"[^\"]+\")"}; {for ( i=1 ; i<=NF ; i++ ) print $i}'
"This"
"is"
1
"line of data"
"without"
"extra quotes"
Acho que é mais rápido, pois funciona nas linhas completas em vez de dividir a linha nos campos.