Bash 从外壳程序管道中删除最终换行符(\n)

Bash 从外壳程序管道中删除最终换行符(\n),bash,shell,pipe,newline,zsh,Bash,Shell,Pipe,Newline,Zsh,我有: 这使我可以执行类似于date | pbcopy的操作,以在剪贴板中获取日期 但是,我在日期的末尾也会得到一个换行符,粘贴后需要手动删除它 如何从管道中删除最终换行符(且仅删除最终换行符?管道通过: alias pbcopy='xclip -selection clipboard -in' $ { echo foo; echo bar; } | sed -z '$ s/\n$//' | xxd 00000000: 666f 6f0a 6261 72

我有:

这使我可以执行类似于
date | pbcopy
的操作,以在剪贴板中获取日期

但是,我在日期的末尾也会得到一个换行符,粘贴后需要手动删除它

如何从管道中删除最终换行符(且仅删除最终换行符?

管道通过:

alias pbcopy='xclip -selection clipboard -in'
$ { echo foo; echo bar; } | sed -z '$ s/\n$//' | xxd
00000000: 666f 6f0a 6261 72                        foo.bar
如果通过
-z
将分隔符设置为
NUL
,则sed不会将
\0
添加到流的末尾,而要创建POSIX文本文件(定义为以
\n
结尾),它将始终输出最终的
\n
,而不使用
-z

例如:

并为证明无
NUL
增加:

$ { echo foo; echo bar; } | sed -z '$ s/\n$//'; echo tender
foo
bartender

要删除多个尾部换行符,请通过以下管道:

alias pbcopy='xclip -selection clipboard -in'
$ { echo foo; echo bar; } | sed -z '$ s/\n$//' | xxd
00000000: 666f 6f0a 6261 72                        foo.bar