在 shell 中用逗号替换新行

问题描述 投票:0回答:5

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

我知道这个问题:如何用制表符替换换行符? - 但它确实会在末尾产生一个制表符而不是新行。

到目前为止我已经:

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

有更简单的方法吗?这不是一项作业,我只是好奇想提高我的脚本水平。

bash shell scripting sed awk
5个回答
15
投票

这可能对你有用:

paste -s -d, file

paste -s -d" " file

3
投票

这应该有用:

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

或者也许使用 sed:

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

1
投票

使用

perl
并不像
paste
那么简单,但它确实可以推广到更多情况:

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

(?!$)
是一个前瞻断言,意思是“不在最后”,所以最后一个换行符被保留。


0
投票

可以使用 sed 命令删除末尾的“,”

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

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

谢谢。


0
投票

这里使用

sed
:

将换行符替换为逗号

sed 'N;s/\n/,/' filename.csv

© www.soinside.com 2019 - 2024. All rights reserved.