从粘贴板的输入字符串中删除换行符的最简单方法


72

希望相当简单,当我运行以下命令(OS X 10.6)时解释用例:

$ pwd | pbcopy

粘贴板的末尾包含换行符。我想摆脱它。


1
旁注:如果要这样做的原因是将其粘贴到Finder(类型~)的“转到”字段中,则只需使用pwd | pbcopy,在文本字段中粘贴,然后按退格键即可。
kizzx2 2011年

Answers:


104

pwd | tr -d '\n' | pbcopy


20
这也提供了一个很好的别名alias copy="tr -d '\n' | pbcopy"
tobius 2012年

10
那不会剥离所有新行吗?如果我只希望删除最后一个换行符怎么办?
davidmh,2014年

2
@davidmh-是的,剥离了所有这些。我只是总是删除工作正常的最后一个字符:head -c -1taylor.woodstitch.com/linux/…–
泰勒·霍克斯

1
在bashrc中,我喜欢:alias cpwd="pwd | tr -d '\n' | pbcopy":)
Matt Hancock

7
即使@TaylorHawkes的'head -c -1'在OSX上对我不起作用(BSD head不喜欢负值),它的确指出它从所有行中除去换行符,而不仅仅是尾随的行。有效的变体是alias pbc='xargs echo -n | pbcopy'
jvd10 '16

38
printf $(pwd) | pbcopy

要么

echo -n $(pwd) | pbcopy

请注意,如果目录名称中包含空格字符,则应使用引号。例如:

echo -n "$(pwd)" | pbcopy

2
第一个是不安全的:字符串中可能包含%。
grep 2010年

5
您可以像这样确保安全:printf '%s' $(pwd) | pbcopy
Dennis Williamson,2010年

2
第二个命令非常有价值。很echo -n "text ""text \c"
高兴

此解决方案对我来说效果更好,因为我使用别名复制了最后一条命令:alias cplc ='echo -n $(fc -ln -1)| pbcopy”
杰克“

8

我写了一个工具noeol来解决这个问题。它通过管道将stdin传递到stdout,但如果有末尾的换行符,则将其结尾。例如

pwd | noeol | pbcopy

…我别名copynoeol | pbcopy

在这里查看:https : //github.com/Sidnicious/noeol


0

对我来说,我对tr -d '\n'方法有疑问。在OSX上,我碰巧通过安装了coreutils软件包brew install coreutils。这提供了所有“标准” GNU实用程序,g在它们的典型名称之前都带有前缀。因此,headghead例如。

IMO可以更安全地使用它:

pwd | ghead -c -1 | pbcopy

您可以od用来查看输出情况:

$ pwd | ghead -c -1 | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c
0000022

$ pwd | /usr/bin/od -h
0000000      552f    6573    7372    732f    696d    676e    6c6f    6c65
0000020      696c    000a
0000023

区别?

000a是一个NUL和换行符hexcodes。该ghead -c -1交给受之前仅仅是“要吃掉”从输出的最后一个字符| pbcopy

$ man ascii | grep -E '\b00\b|\b0a\b'
     00 nul   01 soh   02 stx   03 etx   04 eot   05 enq   06 ack   07 bel
     08 bs    09 ht    0a nl    0b vt    0c np    0d cr    0e so    0f si
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.