Я уверен, что вы также можете сделать это в sed но мне намного проще в Perl:
perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx/\"\"\"/g' data.txt
ОБЪЯСНЕНИЕ:
perl -pe : выполнить скрипт, указанный в командной строке в каждой строке входного файла
s/([^,])\"/$1xxx/g; заменить каждое вхождение " которому предшествует любой не запятый символ, на случайную строку xxx . Это предполагает, что ваши данные никогда не будут содержать xxx .
s/xxx,/\",/g; заменить те xxx , за которыми следует запятая, обратно на ", ,.
s/xxx/\\\"/g : заменить остальные xxx на экранированные кавычки \" , это будут те " которые были в ваших данных.
ПРИМЕР:
$ cat test.txt
"data","da"t"a","data","data","foo "bar" foo", "data"
$ perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx//g' test.txt
"data","data","data","data","foo bar foo","data