sed / awkは中括弧{}内の二重引用符を削除します。

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","[email protected]","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","[email protected]","Student"

どんな助けでも大変感謝します。ありがとうございます!

ベストアンサー1

次のコマンドを使用すると簡単になります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外側に伸ばして内部を脱出してください。{...}"

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

おすすめ記事