我目前正在处理一个处理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
答案 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