我想用逗号或空格替换文本中的新行,但不更改最后一个新行。
我知道这个问题:如何用制表符替换换行符? - 但它确实会在末尾产生一个制表符而不是新行。
到目前为止我已经:
awk 'NR>1{printf","} {printf $1} END{printf"\n"}'
有更简单的方法吗?这不是一项作业,我只是好奇想提高我的脚本水平。
这可能对你有用:
paste -s -d, file
或
paste -s -d" " file
这应该有用:
echo ${$(tr '\n' ',' < file)%?}
或者也许使用 sed:
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g' file
使用
perl
并不像paste
那么简单,但它确实可以推广到更多情况:
perl -0pe 's/\n(?!$)/,/g' filename # comma
perl -0pe 's/\n(?!$)/ /g' filename # space
(?!$)
是一个前瞻断言,意思是“不在最后”,所以最后一个换行符被保留。
可以使用 sed 命令删除末尾的“,”
# sed -i 's/,$//g' endmodify.txt
# cat endmodify.txt
root
bin
daemon
adm
lp
sync
games
gopher
谢谢。
这里使用
sed
: 将换行符替换为逗号
sed 'N;s/\n/,/' filename.csv