File 如何使用sed将csv文件中的空白字段替换为字符串

File 如何使用sed将csv文件中的空白字段替换为字符串,file,bash,csv,sed,File,Bash,Csv,Sed,我目前正在编写一个处理csv文件的脚本,我正在尝试使用字符串“data\n/a”替换csv文件中的所有空白字段。起初,我认为我可以简单地使用以下方法来完成这项任务: sed -e "s/hi/data_n\/a/g" 但不幸的是,这会遗漏任何可能出现在csv文件行的开头或结尾的空字段。我不知道该怎么做,所以我想知道是否有人能帮助我朝着正确的方向前进,或者就我应该做什么提供建议?谢谢 以下是csv文件的示例: ,,6004,,,15:00.00,30004,Colleen,2010-02-10

我目前正在编写一个处理csv文件的脚本,我正在尝试使用字符串“data\n/a”替换csv文件中的所有空白字段。起初,我认为我可以简单地使用以下方法来完成这项任务:

sed -e "s/hi/data_n\/a/g"
但不幸的是,这会遗漏任何可能出现在csv文件行的开头或结尾的空字段。我不知道该怎么做,所以我想知道是否有人能帮助我朝着正确的方向前进,或者就我应该做什么提供建议?谢谢

以下是csv文件的示例:

,,6004,,,15:00.00,30004,Colleen,2010-02-10
2,Closed,6005,,,30:00.00,30005,Rich,2010-02-11
7,Closed,6001,,,30:00.00,10001,Mary Beth,2010-02-11

如果awk是一个选项,您可以尝试以下操作:

awk -F, '{for(i=1;i<=NF;++i){if($i==""){printf "data_n/a"}else{printf $i} if(i<NF)printf ","} printf "\n"}' infile

awk-F'{for(i=1;i如果awk是一个选项,您可以尝试以下操作:

awk -F, '{for(i=1;i<=NF;++i){if($i==""){printf "data_n/a"}else{printf $i} if(i<NF)printf ","} printf "\n"}' infile

awk-F'{for(i=1;i使用perlregex

   perl -pe 's;^,|,$|(?<=,),;data_n\/a,;g' input.cvs

使用perlregex

   perl -pe 's;^,|,$|(?<=,),;data_n\/a,;g' input.cvs

^表示行首,$表示行尾

sed "s/,,/data_n\/a,/g;s/^,/data_n\/a,/;s/,$/,data_n\/a/" file >outfile

^表示行首,$表示行尾

sed "s/,,/data_n\/a,/g;s/^,/data_n\/a,/;s/,$/,data_n\/a/" file >outfile
这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):


虽然我最终选择了sed答案,但您发布的awk解决方案同样有效,谢谢!虽然我最终选择了sed答案,但您发布的awk解决方案同样有效,谢谢!这不会替换最后一个字段,例如这不会替换最后一个字段,例如