sed – 在完成replace之后从上市值中删除最后一个逗号

我正在使用sed来replace我的新行\n文件,但是,在我的最后一个项目中,我不想要。

我怎样才能删除这个?

例:

 sed 's/\n/,/g' myfile.out > myfile.csv 

输出:

 1,2,3,4,5,6, 

那么你可以使用标签:

 $ cat file 1 2 3 4 5 6 $ sed ':a;N;s/\n/,/;ba' file 1,2,3,4,5,6 

您也可以使用粘贴命令:

 $ paste -sd, file 1,2,3,4,5,6 

考虑jaypal singh的paste解决方案 ,这是最高效和优雅的。

一个awk替代方案,它不需要首先将整个文件读入内存:

 awk '{ printf "%s%s", sep, $0; sep = "," }' myfile.out > myfile.csv 

如果输出应该有一个尾随换行符 (感谢, 埃德莫顿 ):

 awk '{ printf "%s%s", sep, $0; sep = "," } END { printf "\n" }' myfile.out > myfile.csv 
  • 对于第一个输入行, sep由于是一个未初始化的变量,所以缺省为空字符串,实际上只打印输入行$0

  • 在第一次print之后将"," sep ","设置为","可确保所有剩余的行都有a , prepended。

  • END { printf "\n" }在处理END { printf "\n" }所有输入行后打印结尾的换行符。 ( print ""也可以,因为print追加输出记录分隔符( ORS ),默认为换行符)。

最终效果是,只放在输入行之间 ,所以输出不会有尾随逗号。

你可以在第一个之后添加第二个s命令: sed -z 's/\n/,/g ; s/,$// sed -z 's/\n/,/g ; s/,$// 。 这最后删除逗号。 (选项-z来自gnu sed,我需要它来获得第一个s命令的工作。)