如何从文件中删除双引号但不在双引号内

如何从文件中删除双引号但不在双引号内

我们有部分 CSV 文件的示例(仅包含 3 个字段)

我们的目标是删除所有"字符,但不在双引号内

ssl-server,"ssl.server.truststore.type","jks"
tez-env,"enable_heap_"\n"dump","false"
tez-env,"heap_dump_location"\n"port","/tmp"
tez-env,"tez_user","tez"

预期输出:

ssl-server,ssl.server.truststore.type,jks
tez-env,enable_heap_"\n"dump,false
tez-env,heap_dump_location"\n"port,/tmp
tez-env,tez_user,tez

答案1

我建议使用专用软件进行 csv 操作,尽管sed如果双引号内没有逗号,这种情况可以用简单的方法解决:

sed 's/^"//;s/",/,/g;s/,"/,/g;s/"$//' file

答案2

短的sed解决方案:

sed 's/^"\|"$//g; s/"*,"*/,/g;' file

或者awk方法:

awk -F, '{ for(i=1;i<=NF;i++) gsub(/^"|"$/,"",$i) }1' OFS=',' file

输出(两种方法):

ssl-server,ssl.server.truststore.type,jks
tez-env,enable_heap_"\n"dump,false
tez-env,heap_dump_location"\n"port,/tmp
tez-env,tez_user,tez

相关内容