用shell中的逗号替换新行

时间:2013-08-04 08:47:17

标签: bash shell scripting sed awk

我想用昏迷或空格替换文本中的新行,但不要更改最后一个新行。

我知道这个问题:How to replace newlines with tab characters? - 但它会在结尾处生成一个标签,而不是新行。

到目前为止,我已经来了:

awk 'NR>1{printf","} {printf $1} END{printf"\n"}'

有更简单的方法吗?这不是一项任务,我只是好奇想要升级我的脚本。

4 个答案:

答案 0 :(得分:7)

这可能对您有用:

paste -s -d, file

paste -s -d" " file

答案 1 :(得分:2)

这应该做的工作:

echo  ${$(tr '\n' ',' < file)%?}

或者也许使用sed:

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g' file

答案 2 :(得分:1)

使用perl并不像paste那么简单,但它确实推广到更多案例:

perl -0pe 's/\n(?!$)/,/g' filename  # comma
perl -0pe 's/\n(?!$)/ /g' filename  # space

(?!$)是一个前瞻性断言,意思是“不在最后”,所以最后一个换行单独留下。

答案 3 :(得分:0)

您可以使用sed命令删除结尾“,”

 # sed -i 's/,$//g' endmodify.txt

 # cat endmodify.txt
 root
 bin
 daemon
 adm
 lp
 sync
 games
 gopher

感谢。