sed / awk для удаления двойных кавычек “, которые находятся внутри фигурных скобок {}

У меня есть CSV-файл с данными, похожими на это:

"1b579a5e-9701-40eb-bd36-2bc65169da99","week14_Friday-019","6907eaad-1aff-4d26-9088-ba20374b67c0","2181-019","f20af5bb-c716-42e0-9b9d-cbolf5bfecea","15-BIO-2001","COLLEGE Bio 1","d39330be-df56-4365-8fb4-37e68d040c52","Which engine has the smaller efficiency?","{choices:[a","b","c","d],"type:MultipleChoice}","{solution:[0],"selectAll:false,{"selectMultiple:false",}"type:MultipleChoice}","2016-04-25 00:30:19.000","1922ac5a-6ff6-4ea4-9078-6df4d85d294f","{solution:[0],"type:MultipleChoice}","1","1116911f-8ee5-45c3-b173-a6be681bb15a","FakeLastName","FakeFirstName","FakeName@mail.edu","Student" 

Я хочу удалить двойные кавычки “, но только если они находятся внутри фигурных скобок {}, предпочтительно с помощью sed или awk. Желаемый результат:

 "1b579a5e-9701-40eb-bd36-2bc65169da99","week14_Friday-019","6907eaad-1aff-4d26-9088-ba20374b67c0","2181-019","f20af5bb-c716-42e0-9b9d-cbolf5bfecea","15-BIO-2001","COLLEGE Bio 1","d39330be-df56-4365-8fb4-37e68d040c52","Which engine has the smaller efficiency?","{choices:[a,b,c,d],type:MultipleChoice}","{solution:[0],selectAll:false,{selectMultiple:false,}type:MultipleChoice}","2016-04-25 00:30:19.000","1922ac5a-6ff6-4ea4-9078-6df4d85d294f","{solution:[0],type:MultipleChoice}","1","1116911f-8ee5-45c3-b173-a6be681bb15a","FakeLastName","FakeFirstName","FakeName@mail.edu","Student" 

Любая помощь будет принята с благодарностью. Спасибо!

Было бы проще с sed :

 sed -e :1 -e 's/\({[^}]*\)"\([^}]*}\)/\1\2/g; t1' 

Или perl :

 perl -pe 's{\{.*?\}}{$& =~ s/"//gr}ge' 

Обратите внимание, что предполагается, что вложенных {...} .

Для обработки вложенных {...} вы можете использовать возможности рекурсивного регулярного выражения в perl :

 perl -pe 's(\{(?:[^{}]++|(?0))*\})($& =~ s/"//gr)ge' 

С помощью sed работаем, чтобы избежать внутренних {...} s перед удалением " s:

 sed 's/_/_u/g :1 s/\({[^{}]*\){\([^{}]*\)}/\1_<\2_>/g; t1 :2 s/\({[^}]*\)"\([^}]*}\)/\1\2/g; t2 s/_/}/g;s/_u/_/g' 

Попробуйте это с помощью sed :

 $ sed -r ' :L; s/(\{[^"}]*)"(([^"}]*")*)([^"}]*\})/\1\2\4/g; tL; ' file 

awk для вложенных скобок:

  awk -F{ ' {for (i=2; i<=NF; i++) {if (1 == n = split ($i, T, "}")) n++ for (j=1; j 

Неуклюжий, но выдает заданный вывод, по крайней мере для однорядных фигурных скобок.