3

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

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

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

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

有没有更简单的方法来做到这一点?这不是一项任务,我只是想提高我的脚本水平。

4

4 回答 4

11

这可能对您有用:

paste -s -d, file

或者

paste -s -d" " file
于 2013-08-04T08:54:30.620 回答
2

这应该做的工作:

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

或者也许使用 sed:

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g' file
于 2013-08-04T10:20:47.787 回答
1

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

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

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

于 2013-10-26T03:56:20.427 回答
0

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

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

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

谢谢。

于 2013-10-22T07:24:31.543 回答