sed - 在执行替换后从列出的值中删除最后一个逗号

时间:2016-04-23 23:01:59

标签: bash shell unix sed

我使用sed将我的新行\n文件替换为','但工作正常但是,在我的上一篇文章中,我并不想要,

如何删除此内容?

示例:

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

输出:

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

3 个答案:

答案 0 :(得分:5)

你可以使用标签:

$ 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

答案 1 :(得分:3)

考虑jaypal singh's paste solution,这是最有效和最优雅的。

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

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

如果输出应该有一个尾随换行符(谢谢,Ed Morton):

awk '{ printf "%s%s", sep, $0; sep = "," } END { printf "\n" }' myfile.out > myfile.csv
  • 对于第一个输入行sep,由于是未初始化的变量,默认为空字符串,有效打印输入行$0

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

  • END { printf "\n" }在处理完所有输入行后打印一个尾随换行符。 (print ""也会有效,因为print会附加输出记录分隔符(ORS),默认为换行符。

净效应是,仅在输入行之间放置,因此输出不会有逗号。

答案 2 :(得分:2)

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