我正在使用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
命令的工作。)