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

时间:2012-12-01 03:59:37

标签: 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
2,Closed,6005,,,30:00.00,30005,Rich,2010-02-11
7,Closed,6001,,,30:00.00,10001,Mary Beth,2010-02-11

4 个答案:

答案 0 :(得分:3)

使用 perl 正则表达式

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

使用 sed

$ sed -r 's;^,|,$;data_n\/a,;g
:l
s;,,;,data_n\/a,;g
t l' input.cvs

答案 1 :(得分:2)

如果 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

答案 2 :(得分:0)

^表示行的开头,$表示行的结尾

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

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -r ':a;s/(^,)|(,)(,)|(,)$/\2\4data_n\/a\1\3/g;ta' file